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.
-
#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