如何正确比较可能为NaN的两个double变量?现有方案能否简化?
更简洁的实现方式
以下几种方式可以替代你当前的判断逻辑,兼顾简洁性与可读性:
利用NaN的自不等特性:
NaN的核心特性是自身不等于自身(x != x),可以直接用这个逻辑替代std::isnan,代码更紧凑,还无需额外依赖<cmath>(主流编译器均支持该特性,老旧编译器需注意兼容性):first == second || (first != first && second != second)C++20及以上版本的标准库方案:
C++20引入的std::is_eq已内置对NaN的特殊处理——当两个值均为NaN时,该函数会返回true,直接调用即可完成判断:std::is_eq(first, second)使用该函数需要包含
<cmath>头文件,且编译器需支持C++20标准。封装复用函数:
如果代码中多处需要这类判断,可封装成一个小函数,后续调用更简洁:bool equals_with_nan(double a, double b) { return a == b || (std::isnan(a) && std::isnan(b)); } // 调用时直接写 equals_with_nan(first, second)
内容的提问来源于stack exchange,提问作者roulette01
相关产品推荐
相关产品推荐

