【发布时间】:2017-02-16 19:25:26
【问题描述】:
我的理解是,NaN(非数字)本质上是一个从数学函数返回的常数,表示出现问题或计算无效。因此,它们是检查数字是否为 NaN 或更好的函数是有道理的,使用 CERT 编码标准对数学错误进行错误检查 (https://www.securecoding.cert.org/confluence/display/c/FLP32-C.+Prevent+or+detect+domain+and+range+errors+in+math+functions)。
我的问题是这样的;为什么 std::nan() 存在?为什么你会想要一个有效的数字/字符串/值并将其转换为 NaN? (参考:http://en.cppreference.com/w/cpp/numeric/math/nan)
【问题讨论】:
-
与标准的完整性。 NaN 可以有不同的值。可能有必要为测试代码创建一个特定的 NaN,以进行比较。甚至可能需要在运行时检测特定的 NaN。
-
这是否意味着存在一系列代表特定错误的 NaN 常量?
-
可以在库中使用的 NaN!嘘!
-
@Katianie 一个信号 NAN 可能会导致 CPU 异常(一个安静的不是)
-
没有对应于不同
NaN值的特定错误。来自the spec:“库实现可以使用该参数以特定于实现的方式区分不同的 NaN 值。” 请注意,甚至不需要实现支持不同的NaN值。 (quietNaN是一个NaN,如果它在操作中使用并简单地传播,则不会引发异常。有关更多信息,请参阅 WIkipedia article onNaN。)