double / float Problem

OP #925965
Hallo Leute,

ich brauche Informationen bezüglich dem Umgang mit float bzw. double 
Datentypen.

(Ich programmiere auf einem Atmega128 mit AVR Studio.)
Warum erhalte ich bei den unteren Beispielen schon ab der 9. bzw. 8 
Stelle Rundungsfehler? Die Datentypen float und double werden doch mit 4 
Byte (32 bit) dargestellt? Kann mir jemand den Hintergrund erklären?
1
unsigned char temp[200];
2
double f=123.1234567;
3

4
dtostrf( f, 12, 7, temp);   //Double in String wandeln
5
printf("\r\n1: %s",temp);
6
// Ausgabe: 1:  123.1234550 --> an der 9. Stelle ist ein Rundungsfehler aufgetreten
7

8
fk=12345678.1234567;
9
dtostrf( fk, 12, 7, temp);   //Double in String wandeln
10
printf("\r\n3: %s",temp);
11
// Ausgabe: 2: 12345677.6142120 --> an der 8. Stelle ist ein Rundungsfehler aufgetreten
OP #926796
Vielen Dank für Eure Beiträge!

Das 1. Bit (MSB = Bit 31) gibt das Vorzeichen an.
Die nächsten 8 Bit (Bits 30 downto 23) repräsentieren den Exponent.
Und somit bleiben nur noch 23 Bits für die Mantisse übrig.
(2^23 ergibt 8.388.608 --> also nur 7 Stellen Genauigkeit.)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.