C++ – How to use std::signaling_nan


After looking at another question on SO (Using NaN in C++) I became curious about std::numeric_limits<double>::signaling_NaN().

I could not get signaling_NaN to throw an exception. I thought perhaps by signaling it really meant a signal so I tried catching SIGFPE but nope…

Here is my code:

double my_nan = numeric_limits<double>::signaling_NaN();
my_nan += 5;
my_nan = my_nan / 10;
my_nan = 15 / my_nan;
cout << my_nan << endl;

numeric_limits<double>::has_signaling_NaN evaluates to true, so it is implemented on my system.

Any ideas?

I am using ms visual studio .net 2003's C++ compiler. I want to test it on another when I get home.


Best Solution

You can use the _control87() function to enable floating-point exceptions. From the MSDN documentation on _control87():


The run-time libraries mask all floating-point exceptions by default.

When floating point exceptions are enabled, you can use signal() or SEH (Structured Exception Handling) to catch them.