-
        

Ergebnis 1 bis 7 von 7

Thema: AVR-GCC: Floating Point Datentypen

  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791

    AVR-GCC: Floating Point Datentypen

    Anzeige

    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

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.05.2008
    Ort
    Oststeinbek
    Alter
    28
    Beiträge
    607
    Richtig. Double und float ist in AVR-GCC ein und das Selbe. Keine Unterschiede soweit ich weis.

    Gruß, Yaro

  3. #3
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    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.

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    avr-gcc definiert
    Code:
    #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/...19&view=markup
    Disclaimer: none. Sue me.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Danke!

    Meine Befürchtungen bestätigen sich!

    Gruß Dirk

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    34
    Beiträge
    1.780
    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.
    So viele Treppen und so wenig Zeit!

  7. #7
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    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.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •