【发布时间】:2011-07-20 15:32:50
【问题描述】:
为了在我的 C++ 程序中找到浮点变量设置为 NaN 的原因,我启用了如下浮点异常:
#include <fenv.h>
feenableexcept(FE_INVALID | FE_OVERFLOW);
我知道它有效,因为当我写作时:
int val = 0.0/0.0;
在我的程序中出现了一个浮点异常。 但是 NaN 正在通过我的程序的浮点计算“传播”,我不知道哪个变量首先设置为 NaN。
存在什么原因导致变量 beeeing 设置为 NaN,不会导致浮点异常?
【问题讨论】:
-
当添加 FE_UNDERFLOW 我得到很多异常,我乘以 0。下溢真的会导致 NaN 吗?
-
@Nathan 你确定你实际上没有乘以一个接近零的非常小的数字吗?
-
@Nathan:据我所知,是的。看看en.wikipedia.org/wiki/IEEE_754-2008
-
@Nathan:另一种追踪此问题的方法是创建一个
isNaN函数并开始使用assert(!isNaN(x))乱扔代码 -
@Nathan @Erik 为了明确起见,这里是 isNaN 的写法: template
bool isNaN(T value) { return value != value; }
标签: c++ nan floating-point-exceptions