我在我工作的代码库中发现了一个错误,他们使用
first, second
检查两个双打 (first == second
) 是否相等,但这两个变量可能是 NaN
.
如果两个变量都是
NaN
则等式将是 false
.
所以我目前的解决方案是代替
first == second
我们用
(first == second || (std::isnan(first) && std::isnan(second))
有更简单的方法吗?
首先,评估您实际上想要如果两个值都是 NaN 则条件运行。 NaN 是一个很好的指标,表明出现了严重错误,而不是 null 或空状态。如果意图是拥有两个可能存在或不存在的值,您可以考虑将它们更改为
std::optional<double>
以明确这一点。否则,如果你确定,那么你所做的就是正确的。使 NaN 比较起作用并没有什么魔术,即使你确实找到了一个将它抽象出来的库,它仍然会做你刚刚在幕后做的事情。