zwei float zahlen vergeleichen



  • Hi!

    void main()
    {
    
    double x = 1;
    double y = 0.1;
    
    	while(true)
    	{	
    		double z = 0.1;
    
    		y += z;
    		if(x == y)
    		{cout<<"geht";
    			break;
    		}
    	}
    
    }
    

    Eigentlich sollte hier die Bedingung erfüllt sein, wenn y 1 erreicht hat, tut es aber nicht.
    Das Interessante ist, wenn ich y einen Startwert von 0.9 gebe, gehts.
    Warum ist das so?
    Ich verwende überhaupt VC++.

    Vielen Dank im Vorraus1



  • rundungsfehler.
    1.0/3
    +
    1.0/3
    +
    1.0/3
    !=
    1
    denn
    0.3333
    +
    0.3333
    +
    0.3333

    0.9999
    oder so ähnlich.

    nur sind die double-zahlen nicht dezimal und 4-stellig sondern binär und vielstellig. aber es ist das gleiche problem.

    if(fabs(x-y)<0.00001)
    könnte man als lösung nehmen.



  • Danke!


Anmelden zum Antworten