std :: numeric_limits :: quiet_NaN()与std :: nan()vs. NAN

时间:2017-02-04 20:55:00

标签: c++11 floating-point nan cmath

我很惊讶表示安静的NaN值的C ++工具的数量。我发现了三种标准方式:

  1. std::numeric_limits<T>::quiet_NaN() - 通用,我认为这是选择的
  2. std::nanstd::nanfstd::nanl - 接受const char*参数的函数系列
  3. NAN - 一个宏,“评估为安静的非数字”
  4. 这些在C ++ 11中引入。我有几个问题:

    1. const char*std::nan中的complete: function() { $(this).prop("selected", false); } 参数代表什么?如何使用?
    2. 为什么我们需要在C ++ 11中添加,而我们已经为此添加了一个通用特征类? (是否与C兼容?)
    3. 默认情况下我应该使用的是什么? (我想这是第一次)

1 个答案:

答案 0 :(得分:10)

std::nanstd::nanlstd::nanf are inherited from the C Math library; NAN macro也是如此。他们都住在C <math.h>。然而,正如@NicolBolas所暗示的那样,它们只是在C ++ 11中引入,因为它们不是ANSI C的一部分,而是C99,C语言标准的新版本。 C ++标准委员会正在努力更新&#39; C兼容性,可以这么说。

std::numeric_limits<T>是为C ++本身设计的(远在C ++ 11之前),这就是我所使用的。

所以,最重要的答案是:C99兼容性。