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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.