Arbeiten mit zahlen

bebbels

Grünschnabel
Hallo erstmal, das ist bestimmt für einige eine ganz schön dumme frage aber ich hab schon ein paar Bücher durchblättert und versteh leider immernoch nicht warum dieses Programm den wert false zurück gibt.

double f = 0.2;
f = f + 0.4;

if ( f == 0.6){ // ?
cout<<"true";
}else{
cout<<"false";
}

Vielen dank schonmal
 
Schau dir deinen double-Wert im Debugger an bzw. lass ihn dir ausgeben. Nun weißt du warum false rauskommt. Mit dieser Erkenntnis würde ich mir die Beschreibung eines doubles genauer durchlesen ;-)
 
Gut, das ganze hilft mir leider auch nicht wirklich weiter. Es liegt wohl irgendwie am Datentyp der 0.6 in der if abfrage. Aber eigentlich ist das doch auch ein double.
Und vorallem wenn man die 0.6 vorab deklariert, quasi:

double f=0.2;
f=f+0,4;
double g=0.6;

if(f==g)

ist die Abfrage auch wieder falsch.

Nur wenn ich f gleich die 0.6 zuweise ohne die Addition ist die Abfrage korekt.
 
Ein double ist eine Gleitkommazahl und diese wird halb logarithmisch dargestellt, das heißt, die Darstellung einer reellen Gleitkommazahl basiert auf einer Zerteilung in ein Vorzeichen, eine Mantisse und einen Exponenten zur Basis 2. Und dadurch kann es eben sein, dass (wie in einem Fall) 0.2 + 0.4 eben nicht 0.6, sondern 0.6000000009 ist - und das ist ungleich 0.6. Daher dein false.
 
Zurück