当前位置:  开发笔记 > 编程语言 > 正文

使用==运算符比较两个舍入的浮点数是否正确?

如何解决《使用==运算符比较两个舍入的浮点数是否正确?》经验,为你挑选了2个好方法。

或者操作是否有可能失败?

谢谢.

我选择了错误的术语,我真正的意思是四舍五入到0,而不是截断.

关键是,我需要比较两个双精度的整数部分,我只是将它们转换为int然后使用==,但是,正如有人在我之前的一个问题中指出的那样,这可能会引发溢出异常,如果double不能适合整数.

所以问题是'使用==运算符来比较之前舍入为0的两个双精度是否正确,或者我应该坚持使用cast to int方法并捕获可能的异常?



1> nickf..:

这是更新后的网站,它讨论了几种比较浮点数的方法的优缺点.(你仍然可以在这里查看旧网站.)

我采用的方法是"相对误差"方法.找出两个数字之间的差异,将其转换为数字的百分比,如果该百分比足够小,那么你就是平等的.



2> rlbond..:

更糟糕的是,有时,即使是完全相同的数字,它也会失败.这是因为某些编译器或处理器将在CPU寄存器中使用比在存储器中更多的精度位(例如,MSVC具有3个不同的浮点行为选项).因此,最近计算的值可能不会截断这些位并且看起来不相等.永远不要在浮点数上使用==.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有