Wie berechnet ein Computer einen Sündenwert? Wenn ich darüber nachdenke, ist der einzig offensichtliche Weg, viele Sin-Werte in den Speicher zu schreiben, und wenn ein Sin-Wert "berechnet" werden muss, werden einfach Daten aus einer bestimmten Speicheradresse gezogen (z. B. sin (x)) Daten aus der Speicheradresse ziehen, die den Wert von sin (x) enthält. Dies scheint der einzig mögliche Weg zu sein. Oder gibt es eine Funktion, mit der die Sünde eines Wertes berechnet werden kann? Ich versuche wirklich zu fragen, wie ein Computer die Sünde auf einer Basisebene berechnet. Gibt es eine Möglichkeit, Sin-Werte mit einer anderen Funktion zu approximieren, die aus "grundlegenderen" Operationen besteht, und die ALU wäre in der Lage, mehrere "grundlegende" Operationen durchzuführen, um den Sin-Wert zu approximieren, oder werden nur Werte aus dem Speicher abgerufen?
quelle
<placeholder>
, googeln Sie nach "<placeholder>
Berechnungsalgorithmus". Es funktioniert in den meisten Fällen besser, als nach SE zu fragen.Antworten:
Typischerweise werden sin (x) -Funktionen mit hoher Auflösung mit einem CORDIC-Algorithmus (CORDIATE ROTATION DIGITAL COMPUTER) implementiert, der mit einer kleinen Anzahl von Iterationen ausgeführt werden kann, wobei nur Verschiebungen und Additionen / Subtraktionen sowie eine kleine Nachschlagetabelle verwendet werden. Das Originalpapier The CORDIC Computing Technique von Jack Volder stammt aus dem Jahr 1959. Es funktioniert auch gut, wenn es mit Hardware in einem FPGA implementiert wird (und ein ähnlicher Algorithmus würde in einer Hardware-FPU für diejenigen Mikros implementiert werden, die eine FPU haben).
Für eine niedrigere Auflösung, um beispielsweise eine synthetisierte Sinuswelle für einen Frequenzumrichter oder einen Motor-VFD (Frequenzumrichter) zu erstellen, eignet sich eine Nachschlagetabelle (LUT) mit oder ohne Interpolation. Aufgrund der Symmetrie müssen die Werte nur für einen Quadranten der Sinuswelle gespeichert werden.
Wie @Temlib hervorhebt, verwenden die in modernen FPUs verwendeten Algorithmen eine Bereichsreduzierung, gefolgt von einer Auswertung mit dem Remez-Algorithmus , um den maximalen absoluten Fehler zu begrenzen. Weitere Informationen finden Sie in diesem Artikel von Intel. Formale Überprüfung der trigonometrischen Gleitkommafunktionen .
quelle
Die meisten Computer-Trigger-Bibliotheken basieren auf Polynom-Approximationen , die das beste Gleichgewicht zwischen Geschwindigkeit und Genauigkeit bieten. Zum Beispiel sind ein Dutzend Multiplikations- und Additions- / Subtraktionsoperationen ausreichend, um eine vollständige Genauigkeit mit einfacher Genauigkeit für Sinus und Cosinus zu erzielen.
quelle