| std::numeric_limits::signaling_NaN(3) | C++ Standard Libary | std::numeric_limits::signaling_NaN(3) | 
NAME¶
std::numeric_limits::signaling_NaN - std::numeric_limits::signaling_NaN
Synopsis¶
 static T signaling_NaN() throw(); (until C++11)
  
   static constexpr T signaling_NaN() noexcept; (since C++11)
  
   Returns the special value "signaling not-a-number", 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¶
 T std::numeric_limits<T>::signaling_NaN()
  
   /* non-specialized */ T()
  
   bool false
  
   char 0
  
   signed char 0
  
   unsigned char 0
  
   wchar_t 0
  
   char8_t (C++20) 0
  
   char16_t (C++11) 0
  
   char32_t (C++11) 0
  
   short 0
  
   unsigned short 0
  
   int 0
  
   unsigned int 0
  
   long 0
  
   unsigned long 0
  
   long long (C++11) 0
  
   unsigned long long (C++11) 0
  
   float implementation-defined (may be FLT_SNAN)
  
   double implementation-defined (may be DBL_SNAN)
  
   long double implementation-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 payload), 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 <iostream>
  
   #include <limits>
  
   #include <cfenv>
  
   #pragma STDC_FENV_ACCESS on
  
   void show_fe_exceptions()
  
   {
  
   int n = std::fetestexcept(FE_ALL_EXCEPT);
  
   if(n & FE_INVALID) std::cout << "FE_INVALID is raised\n";
  
   else if(n == 0) std::cout << "no exceptions are raised\n";
  
   std::feclearexcept(FE_ALL_EXCEPT);
  
   }
  
   int main()
  
   {
  
   double snan = std::numeric_limits<double>::signaling_NaN();
  
   std::cout << "After sNaN was obtained ";
  
   show_fe_exceptions();
  
   double qnan = snan * 2.0;
  
   std::cout << "After sNaN was multiplied by 2 ";
  
   show_fe_exceptions();
  
   double qnan2 = qnan * 2.0;
  
   std::cout << "After the quieted NaN was multiplied by 2 ";
  
   show_fe_exceptions();
  
   std::cout << "The result is " << qnan2 << '\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¶
 has_signaling_NaN identifies floating-point types that can
    represent the special
  
   [static] value "signaling not-a-number" (NaN)
  
   (public static member constant)
  
   quiet_NaN returns a quiet NaN value of the given floating-point type
  
   [static] (public static member function)
  
   isnan checks if the given number is NaN
  
   (C++11) (function)
| 2022.07.31 | http://cppreference.com |