Ich war ziemlich beeindruckt, das letzte Beispiel in Todd Veldhuizens zu sehen, in dem die trigonometrischen Funktionen sin
und cos
zur Kompilierungszeit vorberechnet sind. Um ehrlich zu sein, es hat mich umgehauen, und wenn Sie Code schreiben, der eine enorme Anzahl von diesen in Schleifen ausführt, wie ich bin, dann könnte dies eine wesentliche Auswirkung auf die gesteigerte Leistung haben.Welche mathematischen Operatoren sind in der Metaprogrammierung verfügbar?
Frage 1
aber es führte mich zu fragen, wo die Grenze zwischen gezogen, was als Laufzeitwerkzeug zur Verfügung steht (tatsächliche mathematische Bibliothek Funktionen wie sin
oder cos
Aufruf) und was ist als nur ein kompilierbarer mathematischer Operator.
Das Beispiel von Todd muss die trigonometrische Funktion manuell berechnen.
Bin ich dann davon ausgehen, dass ein Compiler von allen gewöhnlichen mathematischen Funktionen *
+
-
/
aber sonst nichts fähig ist?
Frage 2
In einem solchen Fall würden Sie nur in der Lage sein zu bekommen Kompilierung-Ergebnisse für sin
und cos
Berechnungen auf ganze Zahlen, nicht wahr? Das heißt, Sie können das Ergebnis von etwa sin 45.5
nicht vorkompilieren, richtig?
Oder vielleicht, wenn die Vorlage nur ganze Zahlen als Parameter annehmen können, können Sie mehrere ganze Zahlen nehmen und ein float
aus ihnen in der Klasse machen, wie vorbei 1
2
3
und 1.23
Herstellung der sin
eines Float-Wert zu erhalten.
Zur Berechnung von Sinus in Kompilierzeit mit Serienerweiterung siehe http://www10.informatik.uni-erlangen.de/~pflaum/pflaum/ProSeminar/meta-art.html – jmihalicza