(first == second || (std::isnan(first) && std::isnan(second))
使用命名函数开始:
inline bool areFloatPointComparablyEquivelent(double lhs, double rhs)
{
// Add a long very detailed explanation of why you need
// This expression (in two years you will not be here and the
// the next maintainer may own an axe and know where you live).
// The exact reason or expression is not that important.
// What is important (if not trivial, obvious) is a WHY.
return result;
}
2条答案
按热度按时间wwodge7n1#
首先,评估如果两个值都是NaN,您是否确实“希望"条件运行。NaN是一个很好的指示器,表明出现了严重错误,而不是null或空状态。如果您的意图是要有两个可能存在也可能不存在的值,您可以考虑将它们更改为
std::optional<double>
以明确这一点。否则,如果您确定,那么你所做的就是正确的,没有什么魔术可以使NaN比较工作,即使你找到了一个库,抽象了它,它仍然会做你刚才在引擎盖下做的事情。brccelvz2#
不要使用过于笼统的表达方式:
使用命名函数开始:
现在,在任何需要进行测试的地方(即使只是在一个地方)都可以使用这个自文档化函数。