<分区>
我的Matlab版本是R2012a
为什么在 Matlab 1.1-0.2 中不等于 0.9!!!!!?
这太糟糕了!
>>1.1-0.2 == 0.9
ans =
0
标签 matlab
<分区>
我的Matlab版本是R2012a
为什么在 Matlab 1.1-0.2 中不等于 0.9!!!!!?
这太糟糕了!
>>1.1-0.2 == 0.9
ans =
0
最佳答案
这不是 Matlab 问题;这是一个 float 问题。您将在 C++(或任何符合 IEEE754 的编程语言)中得到相同的结果:
#include <iostream>
int main(int, char **) {
std::cout << (1.1-0.2==0.9) << std::endl;
return 0;
}
输出:
0
这是因为 1.1 和 0.9 cannot be represented exactly in binary .这就像用十进制表示 1/3:你必须写
0.33333333333333333333333333333333333333333333333...
并无限期地继续下去。但无论你继续多久,你永远不会把它做好。
在 float 中,您只能存储这么多数字,因此计算必须在某个地方停止。计算的结果其实是
>> 1.1-0.2
ans =
9.000000000000001e-01
这很接近,但不太正确。
正因为如此,在使用==
比较两个 float 之前,你应该三思;很少有 ==
运算符可以在没有像您刚刚遇到的那样的一些“奇怪”后果的情况下应用。
最好使用舍入特定公差,例如
abs(1.1-0.2 - 0.9) <= eps(0.9)
其中 eps
是一个返回 spacing-between-doubles 的 Matlab 函数对于特定的 double 值。但实际上,这不是一个包罗万象的解决方案。正确比较 float 是一件棘手的事情。
关于matlab - 这是一个 Matlab 错误吗?你有同样的问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13699596/