Ich möchte sowohl den Sinus als auch den Co-Sinus eines Wertes zusammen berechnen (zum Beispiel um eine Rotationsmatrix zu erstellen). Natürlich könnte ich sie wie nacheinander separat berechnen a = cos(x); b = sin(x);, aber ich frage mich, ob es einen schnelleren Weg gibt, wenn beide Werte benötigt werden.
Bearbeiten: Um die bisherigen Antworten zusammenzufassen:
Vlad sagte, dass es den Befehl asm gibt, der
FSINCOSbeide berechnet (fast zur gleichen Zeit wie ein Anruf anFSINallein).Wie Chi bemerkt hat, wird diese Optimierung manchmal bereits vom Compiler durchgeführt (bei Verwendung von Optimierungsflags).
caf wies darauf hin, dass funktionen
sincosundsincosfwahrscheinlich verfügbar sind und direkt durch einfaches einschließen aufgerufen werden könnenmath.hDer Tanascius- Ansatz zur Verwendung einer Nachschlagetabelle wird kontrovers diskutiert. (Auf meinem Computer und in einem Benchmark-Szenario läuft es jedoch dreimal schneller als
sincosmit fast der gleichen Genauigkeit für 32-Bit-Gleitkommazahlen.)Joel Goodwin verband sich mit einem interessanten Ansatz einer extrem schnellen Approximationstechnik mit ziemlich guter Genauigkeit (für mich ist dies sogar schneller als das Nachschlagen der Tabelle).
sinx ~ x-x^3/6und cosx~1-x^2/4als Annäherungen , wenn Sie kümmern sich um Geschwindigkeit mehr als Genauigkeit. Sie können Begriffe in beiden Serien hinzufügen, wenn Sie der Genauigkeit mehr Gewicht beimessen ( en.wikipedia.org/wiki/Taylor_series scrollen Sie nach unten, um Taylor-Serien auszulösen.) Beachten Sie, dass dies eine allgemeine Methode ist, um jede gewünschte Funktion zu approximieren, die unterschiedliche nZeiten aufweist. Wenn Sie also eine größere Funktion haben, zu der Sinus und Cosinus gehören, werden Sie eine viel größere Geschwindigkeit erhalten, wenn Sie sie anstelle der Sünde approximieren, cos unabhängig.
xnahe an einem bestimmten Punkt benötigen. x_0Erweitern Sie dann Ihre Taylor-Reihe um x_0statt 0. Dies gibt Ihnen eine hervorragende Genauigkeit in der Nähe, x_0aber je weiter Sie entfernt sind Je schlechter die Ergebnisse. Sie haben wahrscheinlich gedacht, dass die Genauigkeit schlecht ist, als Sie sich die gegebene Antwort angesehen und sie für Werte ausprobiert haben, die weit davon entfernt sind 0. Diese Antwort ist mit Sünde, weil um 0 erweitert.