2
Facebookで面白い質問があります。MATLABの修正((20.45-20)* 60)が修正((20)* 60)と等しくない理由
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);
結果は以下の通りである:
間違ってい>> tx
min = 27
min = 26
を(20.45から20)があるため - :与える必要があります彼はMATLAB R2014a(64ビット版)を使用してこのコードを実行されることを要求します0.45と同じ結果が得られますが、そうではありません。
また、%fを試みましたが、それでも同じ結果が得られました。
最初は、浮動小数点の保存に問題があると思っていましたが、計算した後、正解とは思われませんでした。
私はこの質問が面白くて挑戦的だと思います。誰も私がこれがどうなるかを説明するのを助けてくれますか?
ありがとう!
はい、浮動小数点を保存するとエラーになります。 '0.45'は' 20.45-20'ではありません –
役に立つ講義:https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – liori
0.45に最も近い倍数は0.450000000000000011102230246251565404236316680908203125で、正確な値よりわずかに大きくなります。 20.45に最も近い倍数は、20.449999999999999289457264239899814128875732421875であり、厳密よりもわずかに小さい。 20.45-20は0.449999999999999289457264239899814128875732421875 –