为什么 std::numeric_limits::digits10 是 int 类型的少一个?
Why is std::numeric_limits::digits10 is one less for int types?
为什么 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位数字组成。
std::numeric_limits<T>::digits10
是 保证 位数,在某种意义上,具有这么多位数的数字可以用类型 T
不会造成信息溢出或丢失。
例如std::numeric_limits<int64_t>::digits10
不能是 19,因为 9'223'372'036'854'775'808
有 19 个数字但在 int64_t
.
中不能表示
在一般情况下,digits<N>
的这种保证值将始终受到平台上这种 "one less" 差异的影响,其中 digits<N>
不是用于内部表示的 radix
的幂.在非特殊情况下 radix
为 2。由于 10 不是 2 的幂,因此 digits10
比最大值的长度小 1。
如果 std::numeric_limits<T>
包括 digits16
或 digits8
这些值对于 radix 2 平台将是 "precise"。
numeric_limits::digits的定义如下:
std::numeric_limits::digits10的值是类型T可以不改变地表示的10进制数字的个数,即任何有这么多十进制数字的数字都可以转换为类型 T 的值并返回十进制形式,不会因舍入或溢出而发生变化。
这意味着 int8_t 是 2 位数字,因为有些 3 位数字不能用 int8_t(即 999)
表示
为什么 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位数字组成。
std::numeric_limits<T>::digits10
是 保证 位数,在某种意义上,具有这么多位数的数字可以用类型 T
不会造成信息溢出或丢失。
例如std::numeric_limits<int64_t>::digits10
不能是 19,因为 9'223'372'036'854'775'808
有 19 个数字但在 int64_t
.
在一般情况下,digits<N>
的这种保证值将始终受到平台上这种 "one less" 差异的影响,其中 digits<N>
不是用于内部表示的 radix
的幂.在非特殊情况下 radix
为 2。由于 10 不是 2 的幂,因此 digits10
比最大值的长度小 1。
如果 std::numeric_limits<T>
包括 digits16
或 digits8
这些值对于 radix 2 平台将是 "precise"。
numeric_limits::digits的定义如下:
std::numeric_limits::digits10的值是类型T可以不改变地表示的10进制数字的个数,即任何有这么多十进制数字的数字都可以转换为类型 T 的值并返回十进制形式,不会因舍入或溢出而发生变化。
这意味着 int8_t 是 2 位数字,因为有些 3 位数字不能用 int8_t(即 999)
表示