Sono rimasto molto impressionato nel vedere l'ultimo esempio in metaprogramming guide di Todd Veldhuizen in cui le funzioni trig come sin
e cos
sono calcolate in fase di compilazione. Per essere onesti, mi ha sconvolto e se stai scrivendo un codice che esegue un numero enorme di questi in loop, come lo sono io, questo potrebbe avere un effetto sostanziale sull'aumento delle prestazioni.Quali operatori matematici sono disponibili in metaprogrammazione
Domanda 1
Tuttavia, mi ha portato a chiedersi dove viene disegnata la linea tra ciò che è disponibile come strumento di run-time (chiamando effettive funzioni di libreria matematica come sin
o cos
) e ciò che è disponibile come solo un operatore matematico in fase di compilazione.
L'esempio di Todd deve calcolare manualmente la funzione trigonometrica utilizzando solo l'aritmetica ordinaria.
sono io supporre allora che un compilatore è in grado di tutte le funzioni matematiche ordinarie *
+
-
/
ma niente altro?
Domanda 2
In tal caso, si sarebbe solo in grado di ottenere risultati compilazione in tempo per sin
e cos
calcoli su numeri interi, giusto? Cioè, non puoi precompilare il risultato di qualcosa come sin 45.5
, corretto?
O forse, se il modello può accettare solo numeri interi come parametri, è possibile richiedere diversi numeri interi e fare un float
fuori di essi nella classe, come passare 1
2
3
e facendo 1.23
per ottenere il sin
di un valore float.
Per il calcolo sinusoidale in fase di compilazione con espansione in serie, consultare http://www10.informatik.uni-erlangen.de/~pflaum/pflaum/ProSeminar/meta-art.html – jmihalicza