PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AVR-GCC: Floating Point Datentypen



Dirk
15.07.2009, 22:28
Also, ich habe da auch nach Recherche ein Verständnisproblem.

Ich habe gefunden, dass AVR-GCC letztlich nur den Float Typ (32 Bit) beherrscht. Trotzdem wird bei Double oder Long Double vom Compiler nicht gemeckert, aber er rechnet mit 32 Bit.
Ist das so richtig?

Andere Quellen sagen, der Compiler würde intern mit 64 Bit rechnen, aber letztlich nur 32 Bit ausgeben bzw. runden. Stimmt das?

Wer kann Klarheit da rein bringen?

Ich bin etwas verwirrt und schließe aus dem Ganzen, dass ich Double gar nicht benutzen brauche, da der Typ keine höhere Genauigkeit bringt. Richtig?

Gruß Dirk #-o

yaro
15.07.2009, 22:41
Richtig. Double und float ist in AVR-GCC ein und das Selbe. Keine Unterschiede soweit ich weis.

Gruß, Yaro

Besserwessi
15.07.2009, 22:44
Bis jetzt unterstützt AVR-GCC nur das 32 Bit Floatingpoint Format. Wenn man variablen als double definierert wird ersatzweise auch mit den selben Zahlen gerechnet. Es wird auch nichts mit mehr Präzision gerechnet wenn man double schreibt. Es sollte also völlig egal ob man single, double oder float nutzt. Auch gemischt könnte gehen.


Für andere Prozessoren kennt GCC auch andere Floatingpoint typen. Da könnte es zum Teil vorkommen dass die FPU nur ein 64 Bit Format kennt, und dann tatsächlich mit 64 bit gerechent wird und erst im Speicher die Auflösung reduziert wird.

SprinterSB
16.07.2009, 12:59
avr-gcc definiert

#define FLOAT_TYPE_SIZE 32
#define DOUBLE_TYPE_SIZE 32
#define LONG_DOUBLE_TYPE_SIZE 32


Siehe dazu
http://gcc.gnu.org/viewvc/trunk/gcc/config/avr/avr.h?revision=149519&view=markup

Dirk
16.07.2009, 21:42
Danke!

Meine Befürchtungen bestätigen sich!

Gruß Dirk

Felix G
16.07.2009, 23:44
Brauchst du denn unbedingt 64Bit Floats? Auf einem AVR?

Gut, man kann ja eigene Assembler-Funktionen für Addition, Subtraktion, Multiplikation, Division und Typecasts implementieren, aber das lohnt sich meist nicht.

Besserwessi
17.07.2009, 10:53
Es kann schon mal vorkommen, das man mit den 32 Bit Floats nicht klar kommt. davon sind ja nur 24 Bits für die Mantisse, was etwa 7 Stellen an Auflösung bringt. Für eine hochauflösende Frequenzmessung ist das schon zu wenig.

Es gibt dann auch noch Formelen und Algorithemen wo man für Zwischenwerte eine deutlich höhere Auflösung braucht als man im Ergebnis bekommt. Wenn man da nicht aufpaßt kann man sogar mit 64 Bit floats noch reinfallen.

Wenn man alle recheneaperationen ers selbst definieren muß lohntder Aufwand nicht immer, wenn es die Schon fertig gäbe, hätte man da aber ein paar Anwendingen für. Es ist ja auch nicht jede Rechnung Zeitkrietisch.