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

FreeBSD Manual Pages

  
 
  

home | help
std::numeri...ts::digits10(3) C++ Standard Libarystd::numeri...ts::digits10(3)

NAME
       std::numeric_limits::digits10 - std::numeric_limits::digits10

Synopsis
	  static const int digits10;	 (until	C++11)
	  static constexpr int digits10	 (since	C++11)

	  The  value  of  std::numeric_limits<T>::digits10  is	the  number of
       base-10 digits that
	  can be represented by	the type T without change, that	is, any	number
       with this many
	  significant decimal digits can be converted to a value of type T and
       back to decimal
	  form,	without	change due to rounding	or  overflow.  For  base-radix
       types, it is the
	  value	 of  digits  (digits-1 for floating-point types) multiplied by
       \(\small
	  \log_{10}{radix}\)log
	  10(radix) and	rounded	down.

Standard specializations
	  T			     value of std::numeric_limits<T>::digits10
	  /* non-specialized */	     0
	  bool			     0
	  char				std::numeric_limits<char>::digits    *
       std::log10(2)
	  signed  char		      std::numeric_limits<signed char>::digits
       * std::log10(2)
	  unsigned char		     std::numeric_limits<unsigned  char>::dig-
       its *
				     std::log10(2)
	  wchar_t		       std::numeric_limits<wchar_t>::digits  *
       std::log10(2)
	  char8_t  (C++20)	       std::numeric_limits<char8_t>::digits  *
       std::log10(2)
	  char16_t  (C++11)	       std::numeric_limits<char16_t>::digits *
       std::log10(2)
	  char32_t (C++11)	      std::numeric_limits<char32_t>::digits  *
       std::log10(2)
	  short				std::numeric_limits<short>::digits   *
       std::log10(2)
	  unsigned short	     std::numeric_limits<unsigned short>::dig-
       its *
				     std::log10(2)
	  int				std::numeric_limits<int>::digits     *
       std::log10(2)
	  unsigned int		     std::numeric_limits<unsigned int>::digits
       * std::log10(2)
	  long				std::numeric_limits<long>::digits    *
       std::log10(2)
	  unsigned long		     std::numeric_limits<unsigned  long>::dig-
       its *
				     std::log10(2)
	  long	long (C++11)	      std::numeric_limits<long long>::digits *
       std::log10(2)
	  unsigned  long  long	 (C++11)   std::numeric_limits<unsigned	  long
       long>::digits *
				     std::log10(2)
	  float			     FLT_DIG /*	6 for IEEE float */
	  double		     DBL_DIG /*	15 for IEEE double */
	  long double		     LDBL_DIG /* 18 for	80-bit Intel long dou-
       ble; 33 for IEEE
				     quadruple */

Example
	  An  8-bit binary type	can represent any two-digit decimal number ex-
       actly, but 3-digit
	  decimal numbers 256..999 cannot be represented. The  value  of  dig-
       its10 for an 8-bit
	  type is 2 (8 * std::log10(2) is 2.41)

	  The  standard	32-bit IEEE 754	floating-point type has	a 24 bit frac-
       tional part (23
	  bits written,	one implied), which may	suggest	that it	can  represent
       7 digit decimals
	  (24  * std::log10(2) is 7.22), but relative rounding errors are non-
       uniform and some
	  floating-point values	with 7 decimal digits do not  survive  conver-
       sion to 32-bit
	  float	 and  back: the	smallest positive example is 8.589973e9, which
       becomes
	  8.589974e9 after the roundtrip. These	rounding errors	cannot	exceed
       one bit in the
	  representation,  and digits10	is calculated as (24-1)*std::log10(2),
       which is	6.92.
	  Rounding down	results	in the value 6.

	  Likewise, the	16-digit  string  9007199254740993  does  not  survive
       text->double->text
	  roundtrip,  becoming 9007199254740992: the 64-bit IEEE 754 type dou-
       ble guarantees
	  this roundtrip only for 15 decimal digits.

See also
	  radix	       the radix or integer base used by the representation of
       the given type
	  [static]     (public static member constant)
	  digits       number of radix digits that can be represented  without
       change
	  [static]     (public static member constant)
	  min_exponent	one more than the smallest negative power of the radix
       that is a valid
	  [static]     normalized floating-point value
		       (public static member constant)
	  max_exponent one more	than the largest integer power	of  the	 radix
       that is a valid
	  [static]     finite floating-point value
		       (public static member constant)

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

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

home | help