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
|