Frage zum umwandlung von double zu int.
-
double a = 3.251; cout << a << '\t' << static_cast<int>(a*1000) << '\n'; cout << a << '\t' << static_cast<int>(a*10*10*10) << '\n';
Ausgabe:
3.251 3251
3.251 3250Warum wandelt der mir bei der zweiten Rechnung die 325.1 in 325.09999995 um?
Das Problem dritt auch mit der Umwandlung per (int)a*10*10*10 auf.
Mir wurde gesagt dass nicht immer gewaehrleistet sein muss das 0.1 == 0.1 stimmt, aber mir entzieht sich da jegliche Logik...
-
Das Problem mit den Rundungsfehlern bei Fliesskommazahlen wurde hier schon oft besprochen, beispielsweise hier.
-
Ok, also sind viele Gleitkommazahlen nicht genau darstellbar (0,4), andere aber schon (0,5). Und um das zu verstehen "muss man wissen was double darstellt", also was stellt double da? :>
Wie werden die Gleitkommazahlen intern darrgestellt? Hat da einer einen guten Link fuer?
-
Ich bin jetzt mal nett: http://de.wikipedia.org/wiki/Gleitkommazahl#Darstellung
In Zukunft bitte selber suchen