【发布时间】:2014-06-11 07:27:58
【问题描述】:
最近我开始讨论浮点比较。我的观点始终是不要直接使用== 比较两个浮点数。
有人指出这不是真的,在某些情况下使用== 是完全可以的。
我可以想到典型的情况,我检查 IEEE 754 文字,如 +-INF 或 +-0,但除此之外,我想不出这样不会导致问题的情况。
所以我的问题是:使用== 进行浮点比较有效的情况是什么?
【问题讨论】:
-
1. == 1.?使用==检查NAN不会让你走得太远。 -
只要你真的想要相等,它就有效,而不是“足够接近以至于在精确算术下它可能相等”。 0 是这种情况的常见情况,但同样经常,您希望“足够接近 0”。
-
我认为,如果您对相同的输入应用相同的计算*,则数字应该相同,因此在这种情况下,
==比较应该是有效的。 (*计算必须是确定性的) -
@ShaZiv 我记得关于 fpu 和内存中变量的不同精度的一些事情。如果您计算一个值,将其存储回内存中,然后计算下一个(相同)值,从内存中加载回第一个结果然后进行比较,则检查可能会产生错误
标签: c++ floating-point