Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::numeri...gnaling_NaN(3)  C++ Standard Libary std::numeri...gnaling_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_lim-
       its<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  im-
       plementation do.

	  When a signaling NaN is used as an argument to an arithmetic expres-
       sion, 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)

http://cppreference.com		  2022.07.31	  std::numeri...gnaling_NaN(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::numeric_limits::signaling_NaN&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help