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

Informatiker Board » Themengebiete » Praktische Informatik » Softwaretechnik » Gleitkommazahlen » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 2 Beiträge
eulerscheZahl

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.
zisu Gleitkommazahlen

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 .