Forum: Mikrocontroller und Digitale Elektronik 32bit Gleitkomma vs. 64bit Festkomma (sint64) auf ATmega


von pppeter (Gast)


Lesenswert?

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?

von Knut (Gast)


Lesenswert?

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

von Helfer (Gast)


Lesenswert?

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?

von Peter D. (peda)


Lesenswert?

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

von pppeter (Gast)


Lesenswert?

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.

von Willi (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.