Problem mit ganz einfachem if/else Programm



  • Hallo,

    also ich bin im Programmieren noch ein absoluter Anfänger und habe folgendes Programm geschrieben:

    int main()
    {
    cout<<"Was ist 1/20?\n";
    float c;
    cin>>c;
    cin.get();
    cout<<"c="<<c<<"\n";

    if(c==0.05)
    {
    cout<<"Richtig!\n";

    }

    else
    {
    cout<<"Leider falsch.\n";
    }

    cin.get();
    }

    Wenn ich jetzt allerdings 0,05 als Ergebnis eingeben, kommt die Meldung "Leider falsch" Woran kann das liegen?

    Danke im Voraus für die Hilfe.



  • Eventuell weil du 0.05 eingeben musst 🙂



  • Habe ich, geht trotzdem nicht.


  • Administrator

    #include <iostream>
    
    int main()
    {
    	float f;
    	std::cin >> f;
    	std::cout.precision(9);
    	std::cout << f << std::endl;
    
    	return 0;
    }
    

    Führ das mal aus und gib 0.05 ein. Du wirst wahrscheinlich ganz erstaunt feststellen, dass es dir nicht 0.05 ausgibt 🙂
    Sowas nennt man die Ungenauigkeit von Gleitkommazahlen. Die Dinger sind nicht wirklich genau, deshalb sollte man sie nie dazu benutzen, um auf Gleichheit zu prüfen.

    http://de.wikipedia.org/wiki/Gleitkommazahl

    Grüssli



  • mach aus der float eine double dann funktioierts



  • TheExile schrieb:

    mach aus der float eine double dann funktioierts

    Wenn, dann ist das Problem nur hinausgezögert. Es braucht dann etwas mehr Stellen, bis man wieder vor dem gleichen Punkt steht.

    Entweder man rechnet mit gewissen Fehlertoleranzen, oder man benutzt exakte Zahlen, zum Beispiel boost::rational .



  • ja das stimmt, hab nur den einen speziellen fall gemeint

    mfg Alex


Log in to reply