g++ liefert verschiedene Werte für gleiche casts
-
warum?
#include <iostream> using namespace std; double test(double d, int i){ return d * i; } int main() { cout << (long)test(.15,100) << endl; //14! double d = test(.15,100); cout << (long)d << endl; //15! cin.get(); }
-
Ich meine, was ist der Unterschied?
-
Dir sollte schon klar sein, dass long die Zahlen hinter dem Komma weg schneidet und außerdem ist die Ausgabe völlig klar, da ja 0.15 * 100 = 15
und zudem die Sache mit dem long
-
imVorraus schrieb:
Ich meine, was ist der Unterschied?
Der erste cast ergibt mit dem g++ (zumindest mit der mingw 3.4.4 Version) ja 14
-
Vorden schrieb:
Dir sollte schon klar sein, dass long die Zahlen hinter dem Komma weg schneidet und außerdem ist die Ausgabe völlig klar, da ja 0.15 * 100 = 15
und zudem die Sache mit dem long???
aber es wird auch 14 ausgegeben.
ausserdem castet er doch bei der 14er und 15er ausgabe zu long.
-
rofl, habs mir irgendwie net gescheit durchgelesen

hab bloß den zweiten cast gesehen und hab mir gedacht, was will er
sorry
-
Ich vermute der g++ rundet die interne .149999999... nur, wenn sie vorher einer double variable zugewiesen wird. Könnte es auch andere Gründe haben?
-
Wenn ein Gleitkommawert nicht in einen Festkomma-Wert dargestellt werden kann, so bleibt es dem Compiler überlassen, ob die nächst-niedrigere oder nächste-höhere gültige Repräsentation wählt. In solchen Fällen lieber mit ceil(), floor() oder ähnlichem arbeiten.
Btw: 0,15 muss nicht zwingend eine endliche binäre Darstellung haben (bin zu faul zum Nachrechnen
), daher auch der Fehler.
-
test(.15,100)Ooohhhhhhhhhh, ich wusste ja gar nicht das sowas auch geht, einfach die 0 bei .15 weglassen...

-
ok, vielen dank, der thread kann geschlossen werden. ich habe in der FAQ den Beitrag "Runden" von "Shade Of Mine" gefunden :
http://www.c-plusplus.net/forum/viewtopic-var-p-is-284467.html