为什么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位数字组成。
答案 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>
包括digits16
或digits8
,这些价值将是&#34;精确的&#34;用于基数2平台。
答案 1 :(得分:1)
numeric_limits :: digits的定义如下:
std :: numeric_limits :: digits10的值是可以由类型T表示的基数为10的数字,没有变化,也就是说,具有这么多十进制数字的任何数字都可以转换为类型的值T并返回小数形式,不会因为舍入或溢出而发生变化。
这意味着int8_t是2位数,因为有一些3位数字你不能用int8_t表示(即999)