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 ;)
Dan Dr schrieb: > benötigt das rechnen (addieren) von (24Bit)Floatzahlen mehr Rechenzyklen > als das rechnen mit 32 Bit unsigned integer zahlen? Ja.
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.
@ 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.
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.
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.