FreeBSD Manual Pages
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)
NAME | Synopsis | Standard specializations | Example | See also
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>
