为什么std :: numeric_limits :: digits10对于int类型少一个?

时间:2016-04-14 18:40:26

标签: c++ digits

为什么std::numeric_limits<Any Int Type>::digits10比它更小?

例如,std::numeric_limits<int8_t>::digits10 == 2,但100由三位数组成。

或者,std::numeric_limits<int64_t>::digits10 == 18,但INT64_MAX(9'223'372'036'854'775'807)由19位数字组成。

2 个答案:

答案 0 :(得分:1)

std::numeric_limits<T>::digits10保证位数,在某种意义上,具有多个数字的数字可以在T 类型中表示,而不会导致溢出或丢失信息

E.g。 std::numeric_limits<int64_t>::digits10不能为9'223'372'036'854'775'808有19个数字,但在int64_t中无法表示。

在一般情况下,digits<N>的这种保证价值将始终受到这种情况的影响。 digits<N>不是用于内部表示的radix幂的平台上的差异。在非特殊情况下radix为2.由于10不是2的幂,digits10比最大值的长度小1。

如果std::numeric_limits<T>包括digits16digits8,这些价值将是&#34;精确的&#34;用于基数2平台。

答案 1 :(得分:1)

numeric_limits :: digits的定义如下:

std :: numeric_limits :: digits10的值是可以由类型T表示的基数为10的数字,没有变化,也就是说,具有这么多十进制数字的任何数字都可以转换为类型的值T并返回小数形式,不会因为舍入或溢出而发生变化。

这意味着int8_t是2位数,因为有一些3位数字你不能用int8_t表示(即999)