Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Softwaretechnik » Gleitkommazahlen » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Gleitkommazahlen
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
zisu
unregistriert
Gleitkommazahlen Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Meine Frage:
Ich habe ein float a mit 0.6 und ein double b mit 0.6 .
Wenn ich beiden hintereinander immer wieder 0.1 dazuaddiere , bekomme ich nach fünf Mal für
das float a 1.6000001 und für das double b 1.5999999999999999 heraus .
Wie kommt es zu diesen Ergebnissen ?

Meine Ideen:
Ich weiß , dass einige Dezimalzahlen , darunter auch 0.1 , binär nicht genau dargestellt werden können . Ich kann aber nicht genau erklären , wie diese Ergebnisse enstehen und vor allem warum sich das Ergebnis für a von dem Ergebnis für b unterscheidet .
16.09.2015 02:00
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Dazu musst du erst einmal wissen, wie 0.1 binär aussieht: 0.00011001100110011001100110011001100110011...

Es kommen also immer 2 0en und 2 1en im Wechsel.
Beim float hat die Mantisse 23 Bit, also endet die Zahl (Normalisierung und hidden Bit beachten) auf 001100. Danach käme aber eine 1, es wird aufgerundet zu 001101. Es ist also nicht verwunderlich, dass das Ergebnis zu groß ausfällt.

Beim double wird die Mantisse anders gerundet (11001 zu 11010) - allerdings auch aufgerundet.

Ich habe mal versucht, deine Aussage nachzuvollziehen:
code:
1:
2:
3:
4:
5:
6:
7:
#include <stdio.h>

int main(){
	double d = 0.6;
	for(int i = 0; i < 10; i++) d += 0.1;
	printf("%.20lf\n",d);
}

gibt bei mir 1.60000000000000031086 für das double.
Beim float ist es 1.60000026226043701172.

__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 16.09.2015 14:13.

16.09.2015 14:13 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Softwaretechnik » Gleitkommazahlen