Performance von Datentypen

Gast #3049434
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 ;)
Gast #3049461
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.
#3049466
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.
Gast #3049514
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren