Zitat von
Luckie:
Es kommt natürlich noch auf die Genauigkeit der Datentypen an. Eventuell sind sie bei C++ und dem Casio Rechner höher.
Ich denke eher, dort wird mit niedrigerer Genauigkeit gearbeitet.
Wenn man im Beispiel-Code a als Double deklariert, tritt der Fehler nicht auf.
Und warum nicht ?:
Schauen wir uns doch mal an was beim 13. Durchlauf passiert:
1) 1.55 wird in die FPU geladen. (da 1.55 binär nicht exakt darstellbar ist, ein Wert knapp unter 1.55)
2) Es wird mit a multipliziert.
3) Das Ergebnis, ist der gleiche Wert, als wäre a ein Extended-Wert, also knapp unter 1043026
4) Jetzt wird dieses Ergebnis wieder in a gespeichert. Wäre a ein extended-Wert, würde simpel der Inhalt des FPU-Registers gespeichert. Da a aber "nur" ein Double ist, muß gerundet werden, was in diesem Fall die Ungenauigkeit beseitigt.