c++ - 在 C++ 中使用 NaN?

标签 c++ floating-point nan

在 C++ 中使用 NaN 的最佳方式是什么?

我找到了 std::numeric_limits<double>::quiet_NaN()std::numeric_limits<double>::signaling_NaN() .我想使用 signaling_NaN表示一个未初始化的变量如下:

double diameter = std::numeric_limits<double>::signaling_NaN();

但是,这会在分配时发出信号(引发异常)。我希望它在使用时引发异常,而不是在分配时引发异常。

有什么方法可以使用signaling_NaN没有提出分配异常(exception)? signaling_NaN 有没有好的便携替代品?使用时会引发浮点异常?

最佳答案

在进一步研究之后,看起来 signaling_NaN 没有提供。如果启用了浮点异常,则调用它算作处理信号 NaN,因此它会立即引发异常。如果禁用浮点异常,则处理信号 NaN 会自动将其降级为安静的 NaN,因此 signaling_NaN 无论如何都不起作用。

Menkboy's code有效,但尝试使用信号 NaN 会遇到其他问题:没有可移植的方法来启用或禁用浮点异常(如 herehere 所述),如果您依赖启用的异常,第三方代码可能会禁用它们(如 here 所述)。

所以看起来像 Motti's solution确实是最好的选择。

关于c++ - 在 C++ 中使用 NaN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/235386/

相关文章:

C++ 模板声明顺序

r - 如何提取(几乎)完全由 NaN 组成的行和列?

java - 如何解决 NaN 错误

c++ - LNK 2001 : unresolved external symbol while initializing static member

c++ - 自定义委托(delegate)画图在编辑时保留

math - 使用整数的 3 个数字的平均值

c - 什么时候下溢?

python - NaN 和 None 有什么区别?

c++ - 为什么具有推导返回类型的模板不能与它的其他版本重载?

C++ float 比较