2016-03-29 5 views
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を試みましたが、それでも同じ結果が得られました。

最初は、浮動小数点の保存に問題があると思っていましたが、計算した後、正解とは思われませんでした。

私はこの質問が面白くて挑戦的だと思います。誰も私がこれがどうなるかを説明するのを助けてくれますか?

Where the answers are not equal.

ありがとう!

+3

はい、浮動小数点を保存するとエラーになります。 '0.45'は' 20.45-20'ではありません –

+2

役に立つ講義:https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – liori

+5

0.45に最も近い倍数は0.450000000000000011102230246251565404236316680908203125で、正確な値よりわずかに大きくなります。 20.45に最も近い倍数は、20.449999999999999289457264239899814128875732421875であり、厳密よりもわずかに小さい。 20.45-20は0.449999999999999289457264239899814128875732421875 –

答えて

2
あなたが見ている問題は、浮動小数点数を格納して行うことです

、以下を参照してください。あなたがあなたの頭の中で計算を行うと

20.45-20==0.45 

が、それは同じ出てくるが、コンピュータに、それは見ていませんthis question for more details

関連する問題