You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确比较可能为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 15:10:11