GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::numeric_limits::digits10(3) C++ Standard Libary std::numeric_limits::digits10(3)

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


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.


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>::digits *
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>::digits *
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>::digits *
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 double; 33 for IEEE
quadruple */


An 8-bit binary type can represent any two-digit decimal number exactly, but 3-digit
decimal numbers 256..999 cannot be represented. The value of digits10 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 fractional 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 conversion 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 double guarantees
this roundtrip only for 15 decimal digits.


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)

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.