Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Administrator
Administrator
C-/C++-Quelltext |
|
1 2 3 |
for(int j=0; j<1e4; j++) for(float i=0.0f; i<pi; i=i+0.0001f) FastSin0(i); |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
float t = 0.0f; for(int j=0; j<1e4; j++) for(float i=0.0f; i<pi; i=i+0.0001f) t += FastSin0(i); // GANZ WICHTIG: t ausgeben, weil es sonst auch wegoptimiert wird cout << t << endl; |
Administrator
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
inline float TnSin(float x) { float f2 = x * x; float f3 = x * f2; float f5 = f3 * f2; float f7 = f5 * f2; float f9 = f7 * f2; x -= 1.0f / 6.0f * f3; x += 1.0f / 120.0f * f5; x -= 1.0f / 5040.0f * f7; x += 1.0f / 362880.0f * f9; return x; } |
Zitat von »"David Scherfgen"«
Deine Funktion liefert aber nur für einen begrenzten Wertebereich von x korrekte Ergebnisse, richtig? Wieviel Zeit kostet es denn, mit fmodf x auf den passenden Bereich zu trimmen?
Administrator
Zitat von »"David Scherfgen"«
Das hier ist übrigens noch etwas schneller (jedenfalls bei mir):
C-/C++-Quelltext
1 2 3 4 5 6 7 8 9 10 11 12 13 inline float TnSin(float x) { float f2 = x * x; float f3 = x * f2; float f5 = f3 * f2; float f7 = f5 * f2; float f9 = f7 * f2; x -= 1.0f / 6.0f * f3; x += 1.0f / 120.0f * f5; x -= 1.0f / 5040.0f * f7; x += 1.0f / 362880.0f * f9; return x; }
Das Vorberechnen von 1/... kann man sich sparen, weil der Compiler das sowieso tut (habe mir den Assembler-Code angesehen).
Werbeanzeige