Schneller Wurzeln ziehen als sqrtf das kann?
-
Hallo,
habe mich mal an eine eigene sqrt-Funktion für floats gemacht. Bin allerdings auf Dauer nicht annähernd an die Geschwindigkeit von sqrtf aus der Standardlib rangekommen. Gibts da nen schön schnellen Algorithmus?
Gruß
jaque
-
Ich verschiebe das mal nach "Rund um die Programmierung", da ein Algorithmus selbst recht wenig mit der zur Implementierung benutzten Sprache zu tun hat.
Wenn dein Prozessor eine eigene FPU hat, würde ich mir eher weniger Hoffnung auf einen schnelleren Algorithmus machen

-
Dieser Thread wurde von Moderator/in TactX aus dem Forum ANSI C in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
jaque schrieb:
Hallo,
habe mich mal an eine eigene sqrt-Funktion für floats gemacht. Bin allerdings auf Dauer nicht annähernd an die Geschwindigkeit von sqrtf aus der Standardlib rangekommen. Gibts da nen schön schnellen Algorithmus?
Gruß
jaquedu wirst, wie schon gesagt, nichts schnelleres als die fpu macht machen koennen bei gleicher genauigkeit. ansonsten bastel dir ein LUT.
-
float sqrt (float f) { if (f == 0.0f) return 0.0f; float f1 = f; unsigned long *ptr = (unsigned long*)&f; *ptr = (0xbe6f0000-*ptr)>>1; return f1*f; }
-
geh heim schrieb:
float sqrt (float f) { if (f == 0.0f) return 0.0f; float f1 = f; unsigned long *ptr = (unsigned long*)&f; *ptr = (0xbe6f0000-*ptr)>>1; return f1*f; }ist langsammer als die fpu.
-
geh heim schrieb:
float sqrt (float f) { if (f == 0.0f) return 0.0f; float f1 = f; unsigned long *ptr = (unsigned long*)&f; *ptr = (0xbe6f0000-*ptr)>>1; return f1*f; }Nett, danke. Gibts ne Erklärung dazu?