Hat jemand erfahrungen damit wie die Rechenzeit von 32bit Gleitkomma-Operationen ist im vergleich zu 64bit Festkomma-Operatioen? Ich habe ein paar Berechnungen (ziemliche gleichverteilung von +,- und multiplikation ) und komme mit 64bit Festkomma aus wenn ich die Werte auf 4 decimale Nachkommastellen skaliere. Da die ATmega keine FPU haben ist 64bit Festkomma doch bestimmt schneller oder?
pppeter schrieb: > 64bit Festkomma-Operatioen die gibt es nicht, der Controller macht daraus 8 Bit Operationen. > Da die ATmega keine FPU haben ist 64bit Festkomma doch bestimmt > schneller oder? keine Ahnung, aber darf man mal fragen was du mit 64Bit so treibtst? Gruß Knut
pppeter schrieb: > Da die ATmega keine FPU haben ist 64bit Festkomma doch bestimmt > schneller oder? Da wäre ich nicht sicher, das Gegenteil könnte der Fall sein. 64bit häppchenweise auf einem 8bitter Verarbeiten ist doch recht aufwändig; das könnte sich die Waage halten mit 32bit Exponent/Mantisse Verarbeitung. YMMV. Hast du für beides Bibliotheken, sodass man den Code anschauen oder Laufzeittests machen kann?
pppeter schrieb: > Da die ATmega keine FPU haben ist 64bit Festkomma doch bestimmt > schneller oder? Konkret beim AVR-GCC ist 64Bit Ganzzahl riesengroß und grottenlahm. Da bist Du deutlich besser, wenn Du Dir die Grundrechenarten in C selber schreibst. D.h. alle 64Bit-Operanden aus 2*32Bit bastelst. Die float-Lib kostest etwa 1kB Flash, die 64Bit-Lib etwa 5kB. Peter
Knut schrieb: > pppeter schrieb: >> 64bit Festkomma-Operatioen > > die gibt es nicht, der Controller macht daraus 8 Bit Operationen. ja, bzw. 16bit (können die atmega auch). ein 64bit addieren sind also 4x 16bit addieren wobei ein flag als "übertrag" von der vorherigen addition genutzt wird. Knut schrieb: > pppeter schrieb: >> Da die ATmega keine FPU haben ist 64bit Festkomma doch bestimmt >> schneller oder? > > keine Ahnung, aber darf man mal fragen was du mit 64Bit so treibtst? ich habe verschiedene werte, z.b. einen 16bit unsigned bei dem ein bit 0,1 mV entspricht, einen 16bit signed bei dem ein bit 0,01 mV entspricht und z.b einen gain bei dem ein bit 0,0001 entspricht (z.b. 1,1025) und diese wandle ich in 32bit signed integer mit 4 decimalen nachkommastellen um dann mit ihnen zu rechnen. Damit ich aber beim berechnen keine Überläufe habe und Rundungsfehler vermeide rechne ich in 64bit integer. (das Ergebnis speichere ich wiederum in 32bit Integer) > Hast du für beides Bibliotheken, sodass man den Code anschauen oder > Laufzeittests machen kann? Ich hab leider noch nicht heraus gefunden wie ich mit IAR Embedded Workbench die Laufzeit beim debuggen messen kann -.- Bibliotheken hat der Compiler^^ Ich denke addition und subtraktionen werden in Festkomma auf jeden Fall wesentlich schneller gehen als in Gleitkomma, aber wie das bei multiplikation/division aussieht ist schwer zu sagen.
Du verwendest IAR? Dann mach Dir keinen Kopf, welches Format Du nehmen sollst. Wenn float32 reichen, nimm es. Ansonsten nimm double64. Wenn Du den ATmega nicht gerade mit 1MHz laufen läßt, sind beide Varianten recht schnell - ich schätzte, schneller als Du es brauchst ;-)
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.