From cppreference.com
staticTsignaling_NaN()throw();(until C++11)staticconstexprTsignaling_NaN()noexcept;(since C++11)Returns the special value "signaling
", as represented by the floating-point type T. Only meaningful if std::numeric_limits<T>::has_signaling_NaN==true. In IEEE 754, the most common binary representation of floating-point numbers, any value with all bits of the exponent set and at least one bit of the fraction set represents a NaN. It is implementation-defined which values of the fraction represent quiet or signaling NaNs, and whether the sign bit is meaningful.
Return value
Tstd::numeric_limits<T>::signaling_NaN()/* non-specialized */T()boolfalsechar0signedchar0unsignedchar0wchar_t0char8_t(since C++20)0char16_t(since C++11)0char32_t(since C++11)0short0unsignedshort0int0unsignedint0long0unsignedlong0longlong(since C++11)0unsignedlonglong(since C++11)0floatimplementation-defined (may be FLT_SNAN) doubleimplementation-defined (may be DBL_SNAN) longdoubleimplementation-defined (may be LDBL_SNAN) Notes
A NaN never compares equal to itself. Copying a NaN is not required, by IEEE-754, to preserve its bit representation (sign and
), though most implementation do.
When a signaling NaN is used as an argument to an arithmetic expression, the appropriate floating-point exception may be raised and the NaN is "quieted", that is, the expression returns a quiet NaN.
Example
Demonstrates the use of a signaling NaN to raise a floating-point exception:
Run this code
#include<cfenv>#include<iostream>#include<limits>#pragma STDC FENV_ACCESS ONvoidshow_fe_exceptions(){intn=std::fetestexcept(FE_ALL_EXCEPT);if(n&FE_INVALID)std::cout<<"FE_INVALID is raised\n";elseif(n==0)std::cout<<"no exceptions are raised\n";std::feclearexcept(FE_ALL_EXCEPT);}intmain(){doublesnan=std::numeric_limits<double>::signaling_NaN();std::cout<<"After sNaN was obtained, ";show_fe_exceptions();doubleqnan=snan*2.0;std::cout<<"After sNaN was multiplied by 2, ";show_fe_exceptions();qnan*=2.0;std::cout<<"After the quieted NaN was multiplied by 2, ";show_fe_exceptions();std::cout<<"The result is "<<qnan<<'\n';}Output:
After sNaN was obtained, no exceptions are raised After sNaN was multiplied by 2, FE_INVALID is raised After the quieted NaN was multiplied by 2, no exceptions are raised The result is nan See also
[static]
identifies floating-point types that can represent the special value “signaling not-a-number” (NaN)
(public static member constant)
[static]
returns a quiet NaN value of the given floating-point type
(public static member function)
(C++11)
checks if the given number is NaN
(function)