langsame funktionen in c++
-
die "fast" ist saulahm für große werte
-
r0nny schrieb:
die "fast" ist saulahm für große werte
ja das stimmt. Mir ist nicht eingefallen wie man das sonst lösen sollte. Wie würde man dass denn machen?
mfg.
-
division mit anschliesender multiplikation des flieskommaanteils
-
Jo, durch 2 Pi, dann alles vor dem Komma weg, und mal Tabellengrösse (die idealerweise gleich ne 2er Potenz ist), dann ab nach Integer und als Index in die Tabelle verwenden.
Geht halt wirklich nur wenn man keine sehr gute Genauigkeit braucht.
-
r0nny schrieb:
sin cos und tan sind einfach multiplikationen
oh, auf die begründung dieser aussage bin ich mal echt gespannt.
-
r0nny schrieb:
sqrt ist eine iteration/rekursion einer gewissen tiefe (meistens ist 20 - 40 mehr als ausreichend
auf dem 64-er nahen wir 3 newton-iterationen, wenn ich mich recht erinnere. als startwert den float mit alter mantisse und halbem exponent.
-
sqrt kann man manchmal auch weglassen. Aus
if (x < sqrt(y))wird dann zB dies
if (x*x < y)Was logisch gleich ist, jedoch deutlich flotter berechnet werden kann.
-
Aißerdem braucht man (ich) fast immer nur float bei trigonometrischen Berechnunen, double dauert ja noch mal länger.
-
sqrt kann man manchmal auch weglassen. Aus
if (x < sqrt(y))wird dann zB dies
if (x*x < y)Was logisch gleich ist, jedoch deutlich flotter berechnet werden kann.
Und was machst du wenn x eine negative Zahl ist?
Das mit sin cos tan und der multiplikation würd mich auch mal interessieren.
-
Storm.Xapek.de schrieb:
Und was machst du wenn x eine negative Zahl ist?
Uninteressant, wenn es um Beträge geht (was bei sqrt meistens der Fall ist). Ich schrieb ja auch nicht, dass es immer möglich ist. Man muss halt von Fall zu Fall abwägen, ob die Vereinfachung sinnvoll ist.