【问题标题】:std::numeric_limits::quiet_NaN() vs. std::nan() vs. NANstd::numeric_limits::quiet_NaN() 与 std::nan() 与 NAN
【发布时间】:2017-06-22 01:54:23
【问题描述】:

我对代表安静 NaN 值的 C++ 工具的数量感到惊讶。我找到了三种标准方式:

  1. std::numeric_limits<T>::quiet_NaN() - 通用的,我认为它是被选中的
  2. std::nanstd::nanfstd::nanl - 接受 const char* 参数的函数族
  3. NAN - 一个宏,“计算结果是一个安静的非数字”

每一个都是在 C++11 中引入的。我对此有几个问题:

  1. const char* 参数在 std::nan 和 co 中代表什么?它是如何使用的?
  2. 为什么我们需要在 C++11 中添加一个,而我们已经为此添加了一个通用特征类? (是为了兼容 C 吗?)
  3. 默认情况下我应该使用什么? (我想这是第一个)

【问题讨论】:

  • char 用于指定您想要的 Nan。解释未指定(iirc),但在我的 linux 机器上,字节用于初始化 Nan“有效负载”,主要用于帮助诊断哪里特定的 Nans 来自。

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-07-29
    • 2018-07-20
    • 2018-09-03
    • 1970-01-01
    • 2019-05-06
    • 2014-04-01
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多