在查看关于SO(
Using NaN in C++)的另一个问题后,我对std :: numeric_limits< double> :: signaling_NaN()感到好奇.
我无法获得signaling_NaN抛出异常.我想也许通过发信号它真的意味着一个信号,所以我尝试捕捉SIGFPE但不是……
这是我的代码:
double my_nan = numeric_limits<double>::signaling_NaN(); my_nan++; my_nan += 5; my_nan = my_nan / 10; my_nan = 15 / my_nan; cout << my_nan << endl;
numeric_limits< double> :: has_signaling_NaN的计算结果为true,因此它在我的系统上实现.
有任何想法吗?
我正在使用ms visual studio .net 2003的C编译器.我回家后想在另一个地方测试.
谢谢!
解决方法
您可以使用
_control87()
函数启用浮点异常.从_control87()上的MSDN文档:
Note:
The run-time libraries mask all floating-point exceptions by default.
启用浮点异常时,可以使用signal()
或SEH (Structured Exception Handling)捕获它们.