Forum: Mikrocontroller und Digitale Elektronik Performance von Datentypen


von Dan D. (Gast)


Lesenswert?

Hey leute, habe heute eine eigentlich ganz triviale frage, benötige 
jedoch wirklich dringend eine gute antwort ;)

ich programmiere gerade einen 8Bit µC und muss für einen Zählvorgang 
einen großen Datenbereich abdecken. µC hat keine FPU.
Nun meine Frage:
benötigt das rechnen (addieren) von (24Bit)Floatzahlen mehr Rechenzyklen 
als das rechnen mit 32 Bit unsigned integer zahlen?

meine frage stützt sich auf die überlegung, dass eine 32bit zahl ja rein 
theoretisch länger für die berechnung benötigt als eine 24 bit zahl, bei 
verwendung eines 8bit controllers. float jedoch bekannterweise sehr 
rechenintensiv ist bei implementierung in software (also ohne FPU wie 
bei mir)

danke im voraus ;)

von Eumel (Gast)


Lesenswert?

Dan Dr schrieb:
> benötigt das rechnen (addieren) von (24Bit)Floatzahlen mehr Rechenzyklen
> als das rechnen mit 32 Bit unsigned integer zahlen?

Ja.

von Andy (Gast)


Lesenswert?

Welche CPU genau?
Welcher Compiler mit welchen Optionen? (In Assembler programmiert, 
hättest du kurz selbst nachzählen können.)

Ansonsten wird das nur ein Schätzwettbewerb.
je nach CPU (Addition mit oder ohne Carry-Flag) sind das 4-8 
Maschinenbefehle für 32bit, und 3 Additionen + 3-12 Befehle für die 
Mantissenberechnung bei 24bit float.

Interessant wird es erst, wenn die 32bit Breite bei mehrstufiger 
Addition nicht mehr reichen.

von Falk B. (falk)


Lesenswert?

@  Dan Dr (darck)

>ich programmiere gerade einen 8Bit µC

Welchem?

>und muss für einen Zählvorgang
>einen großen Datenbereich abdecken. µC hat keine FPU.
>Nun meine Frage:
>benötigt das rechnen (addieren) von (24Bit)Floatzahlen mehr Rechenzyklen
>als das rechnen mit 32 Bit unsigned integer zahlen?

Nicht nur das, bei 24 Bit Float wirst du dich irgendwann mal verzählen 
bzw. gar nicht mehr weiterzählen.

1,23456e6 + 1 = 1,23456e6

>meine frage stützt sich auf die überlegung, dass eine 32bit zahl ja rein
>theoretisch länger für die berechnung benötigt als eine 24 bit zahl,

Warum? Weil sie 8 Bit mehr hat? Dafür kann die Int-Zahl mit vier 
einfachen Assemblerbefehlen addiert werden. Eine Floatzahl braucht 
deutlich mehr.

http://www.mikrocontroller.net/articles/AVR_Arithmetik#32_Bit_.2B_32_Bit

>verwendung eines 8bit controllers. float jedoch bekannterweise sehr
>rechenintensiv ist bei implementierung in software (also ohne FPU wie
>bei mir)

Eben.

von Sven B. (scummos)


Lesenswert?

Floats sind keine Zählvariablen, das ist eine ganz schlechte Idee, wie 
oben erwähnt. Wenn ein int zu klein ist, musst du halt zwei ints nehmen.

von Kurzer Stapel (Gast)


Lesenswert?

>ich programmiere gerade einen 8Bit µC und muss für einen Zählvorgang
einen großen Datenbereich abdecken. µC hat keine FPU.

unsigned 32bit ist als Zaehlvariable nicht genuegend ? Naja, mit 
genuegend Zeit kann das ja passieren. Dann kann man ja noch 16 bit 
anhaengen und ist dann bei 48 bit unsigned. Das sollte genuegen. Alle 
10ms inkrementiert reicht das dann fuer 88*10^3 Jahre. 48 bit integer 
geht hinreichend schnell zum Zaehlen und benoetigt keine FPU.

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.