Mal so ne blöde Frage:
In unserem Programmentwicklungspraktikum stellte sich die Aufgabe, warum man eine Integer Zahl, die als IEEE754 kodiert ist, nicht in float umwandeln soll. Hier die Aufgabenstellung:
Eine IEEE-754 kodierte Zahl sei in einer Ganzzahl-Variablen int iwert abgelegt.
Erklären Sie, warum die Verwendung des cast-Operators (float)
float fwert = (float) iwert;
ungeeignet ist, die IEEE-754 kodierte Zahl iwert in den Typ float umzuwandeln.
Okay, also mal ausprobiert. Wollte ne Ganzzahl 12345654 genauso wie in der Aufgabe beschrieben in float umwandeln, um zu schauen, was passiert. Naja, was passiert ist, das Ergebnis lautet 1.2345654E7. Nach einem kleinen Test, stellt sich heraus, das die beiden Zahlen genau das gleiche Ergebnis ausspucken, wenn man sie mit 2 multipliziert. Ich hatte eigentlich Rundungsfehler erwartet, aber keine erhalten. Ich stehe irgendwie aufm Schlauch, da ich auch bei Wikipedia nichts dazu gefunden habe außer eben, dass beim Rückwandeln in eine Dezimalzahl Rundungsfehler entstehen. Ich verstehe auch nicht, warum es überhaupt sinnvoll sein soll, eine Ganzzahl in float umzuwandeln.
Meine Antwort auf die Frage habe ich so formuliert:
Weil bestimmte Zahlen im Binärsystem nicht exakt dargestellt werden können. Da würde z. B. 5,49 bei einer Rückumwandlung von der gerundeten float Zahl Ungenauigkeiten auftreten. In diesem Fall wäre 5,49 rückgewandelt 5,489999999999781. Dadurch würde beim weiterrechnen Ungenauigkeiten entstehen.
Naja, danke für Euren Rat! Achso ja, es handelt sich um JAVA.
gruß, mätt