Ich arbeite mit einem ATMega2560 basierten Board und benutze relativ viele floating point Operationen. Ich überlege einige der Rechenschritte zu ersetzen und wollte fragen, ob sich hier jemand schon einmal näher mit ein paar Benchmarks beschäftigt hat. Die meisten einfachen Optimierungsansätze lassen sich auf grundlegende Konzepte runterbrechen: int iPartialRes = (int)fArg1 * (int)fArg2; iPartialRes */ iFoo; schneller als?: float fPartialRes = fArg1 * fArg2; fPartialRes */ iFoo; iSign = fVal < 0 ? -1 : 1; schneller als?: iSign = fVal / fabs(fVal); D.h. wie langsam sind Vergleiche gegenüber Divisionen/Multiplikationen bzw. wie langsam sind type conversions mit anschließender Division/Multiplikation gegenüber floating point Division und Multiplikation? Außerdem würde mich interessieren, wie floating point Multiplikation mit ints implementiert ist.
Daniel Frenzel schrieb: > int iPartialRes = (int)fArg1 * (int)fArg2; > iPartialRes */ iFoo; > schneller als?: > float fPartialRes = fArg1 * fArg2; > fPartialRes */ iFoo; Davon würde ich nicht ausgehen. Die Umwandlung der beiden Floating Point Zahlen in Integer kostet ja auch Zeit. Ob du diese Zeit durch die einfachere Integer Multiplikation wieder reinkriegst, wage ich zu bezweifeln Im Zweifel wirst du das austimen müssen. Vor der Berechnung einen Pin auf High setzen, danach wieder auf Low und mit dem Oszi nachsehen, wie lang die Dinge gedauert haben. > iSign = fVal < 0 ? -1 : 1; > schneller als?: > iSign = fVal / fabs(fVal); Davon würde ich mal ausgehen. Auch in Floating Point ist ein Vergleich, basierend auf der Abfrage eines Vorzeichenbits, wesentlich einfacher als eine Division. Zumal ja im fabs selbst wieder ein Test auf positiv/negativ enthalten ist. In einem gewissen Sinne ist also die Divisionslösung sowas wie 'doppelt gemoppelt - von hinten durch die Brust ins Auge'
:
Bearbeitet durch User
Die Divisionslösung ist sogar fundamental anders, da sie aufgrung von Rundungsfehlern z.B auch 0 liefern kann.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.