Es gibt eine interessante Frage auf Facebook, die ich begegnete. Er bittet darum, dass er mit MATLAB R2014a (64-Bit-Version) und den Code lautete: -Warum fix ((20.45-20) * 60) ist nicht gleich mit fix ((20) * 60) in MATLAB
x = 0.45;
min = fix((x)*60);
fprintf('min = %d \n', min);
x = 20.45
min = fix((x-20)*60);
fprintf('min = %d \n', min);
Die Ergebnisse sind folgende:
>> tx
min = 27
min = 26
die wegen falsch sind (20,45-20) geben sollte das gleiche Ergebnis wie 0,45, aber es nicht.
Er versuchte auch% f, aber es ergab immer noch das gleiche Ergebnis.
Zuerst dachte ich, es wäre ein Problem mit der Speicherung von Fließkomma, aber nachdem ich es berechnet habe, schien es nicht die richtige Antwort zu sein.
Also, ich denke diese Frage ist interessant und herausfordernd. Könnte mir bitte jemand helfen, zu erklären, wie das passiert?
Dank!
Ja, es ist ein Fehler beim Speichern von Fließkommawerten. '0.45' ist nicht' 20.45-20' –
Nützliche Vorlesung: https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – liori
Das nächste Doppel zu 0,45 ist 0.45000000000000000011102230246251565404236316680908203125, etwas größer als genau . Das nächstliegende Doppel zu 20.45 ist 20.449999999999999289457264239899814128875732421875, etwas kleiner als exakt. 20.45-20 ergibt 0.449999999999999289457264239899814128875732421875 –