比较可能为 NaN 的两个变量是否相等的正确方法是什么?

问题描述 投票:0回答:1

我在我工作的代码库中发现了一个错误,他们使用

first, second
检查两个双打 (
first == second
) 是否相等,但这两个变量可能是
NaN
.

如果两个变量都是

NaN
则等式将是
false
.

所以我目前的解决方案是代替

first == second

我们用

(first == second || (std::isnan(first) && std::isnan(second))

有更简单的方法吗?

c++ equality isnan
1个回答
1
投票

首先,评估您实际上想要如果两个值都是 NaN 则条件运行。 NaN 是一个很好的指标,表明出现了严重错误,而不是 null 或空状态。如果意图是拥有两个可能存在或不存在的值,您可以考虑将它们更改为

std::optional<double>
以明确这一点。否则,如果你确定,那么你所做的就是正确的。使 NaN 比较起作用并没有什么魔术,即使你确实找到了一个将它抽象出来的库,它仍然会做你刚刚在幕后做的事情。

© www.soinside.com 2019 - 2024. All rights reserved.