### 613. max_digits10 missing from numeric_limits

**Section:** 21.3.4.2 [numeric.special] **Status:** CD1
**Submitter:** Bo Persson **Opened:** 2006-11-20 **Last modified:** 2016-02-10

**Priority: **Not Prioritized

**View all other** issues in [numeric.special].

**View all issues with** CD1 status.

**Discussion:**

Section 21.3.4.2 [numeric.special] starts out by saying that "All members shall be provided
for all specializations."

Then it goes on to show specializations for float and bool, where one member
is missing (max_digits10).

Maarten Kronenburg adds:

I agree, just adding the comment that the exact number of decimal digits
is digits * ln(radix) / ln(10), where probably this real number is
rounded downward for digits10, and rounded upward for max_digits10
(when radix=10, then digits10=max_digits10).
Why not add this exact definition also to the standard, so the user
knows what these numbers exactly mean.

Howard adds:

For reference, here are the correct formulas from
N1822:

digits10 = floor((digits-1) * log10(2))
max_digits10 = ceil((1 + digits) * log10(2))

We are also missing a statement regarding for what specializations this member has meaning.

**Proposed resolution:**

Change and add after 21.3.4.1 [numeric.limits.members], p11:

static const int max_digits10;

-11- Number of base 10 digits required to ensure that values which
differ ~~by only one epsilon~~ are always differentiated.

-12- Meaningful for all floating point types.

Change 21.3.4.2 [numeric.special], p2:

template<> class numeric_limits<float> {
public:
static const bool is_specialized = true;
...
static const int digits10 = 6;
static const int max_digits10 = 9;
...

Change 21.3.4.2 [numeric.special], p3:

template<> class numeric_limits<bool> {
public:
static const bool is_specialized = true;
...
static const int digits10 = 0;
static const int max_digits10 = 0;
...