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'
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.

 Thread beobachten
 Thread beobachten Seitenaufteilung abschalten
 Seitenaufteilung abschalten