double / float Problem

OP #925965
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren