为什么修复((20.45-20)* 60)与MATLAB

时间:2016-03-29 13:38:33

标签: matlab floating-point precision computation

我在Facebook上遇到了一个有趣的问题。他要求他使用MATLAB R2014a(64位版本)并运行此代码: -

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)应该给出与0.45相同的结果,但事实并非如此。

他也尝试了%f,但它仍然给出了相同的结果。

起初,我认为存储浮点存在问题,但在计算之后,它似乎不是正确答案。

所以,我认为这个问题很有趣,也很有挑战性。有谁可以帮我解释一下这是怎么发生的?

Where the answers are not equal.

谢谢!

1 个答案:

答案 0 :(得分:2)

您遇到的问题与存储浮点数有关,请参阅:

20.45-20==0.45

当你在头脑中进行计算时,它会出现相同的情况,但在计算机中它看不到this question for more details