Hallo allerseits!
Es war notwendig, eine schnelle Berechnung von Sin und Cos zu schreiben. Grundlage für die Berechnungen war die Erweiterung der Taylor-Reihe. Ich benutze es in 3D-Systemen (OpenGL und die Grafikbibliothek meiner Entwicklung). Leider ist es unmöglich, die Anzahl der "idealen" für Double zu reduzieren, aber dies wird durch eine gute Beschleunigung ausgeglichen. Der Code wird im Assembler in Delphi XE6 geschrieben. Wird von SSE2 verwendet.
Nicht für wissenschaftliches Rechnen geeignet, aber vollständig für den Einsatz in Spielen.
Die Genauigkeit reicht aus, um die Länge der Anzahl der verwendeten Single abzudecken
zur Multiplikation mit einer Matrix.
Zusammenfassend:
- Erreichte Genauigkeit ist: 10.e-13
- Die maximale Diskrepanz mit der CPU beträgt 0,000000000000045.
- Die Geschwindigkeit wird im Vergleich zur CPU um das 4,75-fache erhöht.
- Die Geschwindigkeit wird im Vergleich zu Math.Sin und Math.Cos um das 2,6-fache erhöht.
Für den Test habe ich einen Intel Core-i7 6950X Extreme 3.0 GHz Prozessor verwendet.
Delphi-Quellcode ist in Assembler-Kommentare eingebettet.
Quellcode:
Spoiler Überschriftvar gSinTab: array of Double; gSinAddr: UInt64; const AbsMask64: UInt64 = ($7FFFFFFFFFFFFFFF); PI90: Double = (PI / 2.0); FSinTab: array[0..7] of Double = (1.0 / 6.0,
Arbeitsbeispiel hierKonstruktive Vorschläge und Kommentare sind willkommen.