【问题标题】:check NaN number [duplicate]检查NaN数[重复]
【发布时间】:2011-03-27 02:39:01
【问题描述】:

是否可以检查号码是否为NaN

【问题讨论】:

  • NIL(C-ese 中为 NULL)是一个特殊的 pointer 值。数字没有 NULL 之类的东西。您是否正在考虑浮点 NaN?
  • 我的意思是 NaN,我的错,修复了 Q。
  • 这能回答你的问题吗? Checking if a double (or float) is NaN in C++

标签: c++ numbers


【解决方案1】:

您正在寻找null,但这仅对指针有用。数字本身不能为空,它要么具有您放入其中的已知值,要么具有之前内存中的随机数据。

【讨论】:

    【解决方案2】:

    是的,因为NaN 不等于任何其他数字,包括它自己。

    当您考虑 NaN 的含义时,这是有道理的,即您创建了一个实际上无法用“正常”浮点值表示的值。

    因此,如果您创建两个不知道它们是什么的数字,则很难认为它们相等。它们可能是,但是,考虑到它可能是相当大的数字可能性(实际上是无限的),两个相同数字的可能性微乎其微:-)

    您可以查找一个函数(实际上是宏),例如 isnan(在 C 的 math.h 和 C++ 的 cmath 中),或者只使用 NaN 值不等于自身的属性。喜欢:

    if (myFloat != myFloat) { ... }
    

    如果由于某种奇怪的原因,您的 C 实现没有 isnan(它应该,因为标准要求它),您可以编写自己的代码,例如:

    int isnan_float (float f) { return (f != f); }
    

    【讨论】:

    • 并将myFloat != myFloat 包装成某种带有注释的isnan 函数,以免将来不了解它的读者非常困惑。
    【解决方案3】:

    Linux/gcc下有isnan(double),符合BSD4.3。

    C99 提供 fpclassify(x)isnan(x)
    (但 C++ 标准/编译器不一定包含 C99 功能。)

    std::numeric_limit 应该有某种方法...正在检查...

    哦。我应该知道...这个问题之前已经回答过... Checking if a double (or float) is NaN in C++ Using NaN in C++? http://bytes.com/topic/c/answers/588254-how-check-double-inf-nan

    【讨论】:

      猜你喜欢
      • 2015-03-26
      • 1970-01-01
      • 2017-10-03
      • 2016-05-18
      • 2011-08-26
      • 2020-05-13
      • 2021-07-08
      • 2012-10-12
      • 2021-10-11
      相关资源
      最近更新 更多