【发布时间】:2013-03-12 20:16:54
【问题描述】:
我看过这样的帖子:
What is the most effective way for float and double comparison?
还有许多其他相关的帖子。
我在 d3js 库中看到,它使用以下比较:
return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
在C/C++中可以用这个来做double和float的对比吗?
【问题讨论】:
-
您链接的问题试图解释为什么不。其中是否提到了一些似乎不清楚的内容?
-
满足什么?测试相等还是用 epsilon 测试相等?答案是否定的。
-
@sftrabbit 然后你刚刚使用的分支可以优化为一个简单的
xor eax, eax:P -
"UPDATED:..." 那么你写的在功能上和
a == b没有什么不同。 -
在代数上,(1.0/3.0) * 3.0 = 1.0,但对于计算机中的双精度或浮点运算则不能这样说。试想一下,一台内存有限的 PC 是如何存储无限长的有理数 0.333333333333333333333333.... 它必须在某个时刻终止。假设它以 0.33 结束。当你乘以 0.33 * 3 时,你可能会得到 0.99。你甚至可能得到 0.98。你可以得到 1.00。其中两个不“等于” 1.0。
标签: c++ c floating-point