为什么两个相等的数字是不平等的?

84(30天)
Florian内沃
Florian内沃 2016年12月14日
编辑: 詹姆斯Tursa 2016年12月14日
大家好,
我有一些困难比较一些数字和问题是简单总结如下:
有人能告诉我为什么和如何发生的?以及如何避免这类问题在未来如果可能的话。
谢谢你!

接受的答案

亚当
亚当 2016年12月14日
你不应该测试浮点数之间的平等。有很多地方你可以在线搜索查看原因。许多浮点数不能代表100%的准确率和数学对他们往往会引入小错误所以你应该测试中的平等宽容,不直接。区别可能只是1 e-16基本上相当于0为所有明智的使用,但它仍将一个= =测试失败。

更多的答案(2)

詹姆斯Tursa
詹姆斯Tursa 2016年12月14日
编辑:詹姆斯Tursa 2016年12月14日
已经被别人回答的,但是这是一个详细的十进制转换发生了什么和你的特定的例子:
> > num2strexact (0.65)
ans =
0.65000000000000002220446049250313080847263336181640625
> > num2strexact (0.05)
ans =
5.000000000000000277555756156289135105907917022705078125依照
> > num2strexact (0.05 * 17)
ans =
0.850000000000000088817841970012523233890533447265625
> > num2strexact (0.65 + 0.05 * 17)
ans =
1.5
> >
> > num2strexact (0.3)
ans =
0.299999999999999988897769753748434595763683319091796875
> > num2strexact (0.05)
ans =
5.000000000000000277555756156289135105907917022705078125依照
> > num2strexact (0.05 * 24)
ans =
1.20000000000000017763568394002504646778106689453125
> > num2strexact (0.3 + 0.05 * 24)
ans =
1.5000000000000002220446049250313080847263336181640625
所以,你很幸运在一个案例中,不幸的其他情况。你可以在这里找到num2strexact FEX:

渡
2016年12月14日
也请参阅“比较浮点数”的例子文档页面: 确定平等
通常建议使用公差比较浮点数,托尔,而不是使用= =。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!