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 3250

    Warum 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 😉


Log in to reply