通过检查它是否在double极限范围内,可以在Visual Studio中检测无穷大和NaN:
//#include <float.h>
double x, y = -1.1; x = sqrt(y);
if (x >= DBL_MIN && x <= DBL_MAX )
cout << "DETECTOR-2 of errors FAILS" << endl;
else
cout << "DETECTOR-2 of errors OK" << endl;
FLT_MIN
、DBL_MIN
和LDBL_MIN
的定义。它们被定义为每种类型的最小规范化值。例如,单精度有超过800万个合法的非规范化值,它们大于零且小于FLT_MIN
(并且不是NaN)。 - Steve Hollasch
0.f/0.f
的执行要比事后检查代码中的nan
要好得多。如果允许nan
不断蔓延,它会给你的程序带来严重破坏,并可能引入难以找到的 bug。这是因为nan
是有毒的,(5*nan
=nan
),nan
不等于任何东西 (nan
!=nan
),nan
不大于任何东西 (nan
!> 0),nan
不小于任何东西 (nan
!< 0)。 - bobobobo