【发布时间】:2011-11-08 01:15:11
【问题描述】:
我们都知道(对吗?!)不应该通过测试是否相等来比较浮点值 (operator==)。
但是如果我真的想确定两个floats a 和b 是否二进制相等?如果不允许它们是 NaN (或其他“特殊值”),这是否“安全”?我可以依靠operator== 以这种方式运行吗?
【问题讨论】:
-
您对浮点数的二进制比较的建议用途是什么?换句话说,你为什么要这样做?可能有更好的方法来实现您的实际目标。
-
@Michael:我的目标是阅读这个问题的答案,并以此扩展我对我们行业所有工具的知识和理解。
-
@MichaelKohne 除了 OP 提到的目标(这是一个有效且经常被忽略的目标)之外,在许多情况下二进制比较就足够了。您并不总是需要一些花哨的 epsilon 比较,当您只想检查特定的确切值并且由于舍入而不(甚至不应该)关心近似相似的值时(因此我也不喜欢问题的第一句话太多了)。
-
@Christian:我想我概括了一点。
-
请注意,尽管在很多情况下将
==与浮点数一起使用并不是一个好主意,但也有一些情况是完全合理的;例如,如果您执行f = 0;,则稍后的测试(如if (f == 0))会完全按照它的样子进行;没有不精确或不确定性。所以我认为人们应该采取经常听到的格言“永远不要将带有 == 的浮点数与一粒盐进行比较......(并且不要盲目地重复它)
标签: c++ floating-point