C++ Rundet die Werte?
-
Hallo Community.
Ich habe da einen ganz schön komischen Bug. C++ ( gcc Version 4.3.3) rundet die Werte, wenn ich einen Double in einen Integer umwandle.
Hier der Code von meiner Beispielklasse (Bruchrechnen Simulieren)
Bruch::Bruch(const double val) { int ganzZahl = val; // BEISPIEL 2.8 ==> ganzZahl = 2 int nachkomma = (val - ganzZahl) * 10; // Problem: nachKomma = 7?? nicht 8 ??? std::cout << " Ganzzahl: " << ganzZahl << "\t nachkomma: " << nachkomma << std::endl; if(nachkomma == 0) { this->nenner = 1; this->zaehler = ganzZahl; } else { this->nenner = nachkomma; this->zaehler = (ganzZahl * nachkomma)+1; } }Woran könnte das liegen?
Vielen Dank schonmal für die Antworten im Voraus

Drake
-
Hab gerade noch etwas ausprobiert.
Wenn ich 2 Nachkommastellen angebe (2.34) dann kommt das gewünschte Ergebnis heraus.
-
Wie sieht 0.8 in Binaerdarstellung aus? Wie sieht 10 in Fliesskommadarstellung aus?
-
Die Zahl 2.8 ist üblicherweise nicht exact durch ein double darstellbar.
2,8 (dezimal) = 10,1100110011... (binär)Es kann also wegen der endlichen Genauigkeit sein, dass die am dichtesten an 2.8 darstellbare Zahl etwas kleiner ist und val diesen Wert repräsentiert: val < 2.8. Dann wäre (val-ganzZahl)*10 < 8, was die 7 erklärt, denn bei der Konvertierung von double nach int werden die Nachkommastellen einfach abgeschnitten.
-
Danke für die Antworten, hab ganz vergessen, dass der PC auch seine Grenzen hat ^^