std::numeric_limits<T>:: digits10
|
static
const
int
digits10
;
|
(C++11 前) | |
|
static
constexpr
int
digits10
;
|
(C++11 起) | |
std::
numeric_limits
<
T
>
::
digits10
的值表示类型
T
可无损表示的十进制位数,即任何具有该有效十进制位数的数值均可转换为
T
类型值并还原为十进制形式,且不会因舍入或溢出而改变。对于基数为
radix
的类型,其值为
digits()
(浮点类型为
digits
-
1
)乘以
log
10
(radix)
后向下取整的结果。
标准特化
T
|
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 | <td
示例
一个8位二进制类型可以精确表示任意两位十进制数,但无法表示三位十进制数256..999。8位类型的
digits10
值为2(
8
*
std::
log10
(
2
)
的结果为2.41)
标准的32位IEEE 754浮点类型具有24位小数部分(23位显式表示,1位隐含位),这可能暗示其可表示7位十进制数(
24
*
std::
log10
(
2
)
等于7.22)。但由于相对舍入误差的非均匀性,部分具有7位十进制数字的浮点值在转换为32位float并返回时无法保持原值:最小的正例是
8.589973e9
,在往返转换后变为
8.589974e9
。这些舍入误差在表示中不会超过1比特,
digits10
的计算公式为
(
24
-
1
)
*
std::
log10
(
2
)
,即6.92。向下取整后得到值为6。
同样地,16位数字串 9007199254740993 无法在 文本->双精度->文本 的往返过程中保持原值,会变成 9007199254740992 :64位 IEEE 754 双精度类型仅能保证15位十进制数字的往返精度。
参见
|
[static]
(C++11)
|
区分此类型所有值所需的十进制位数
(公开静态成员常量) |
|
[static]
|
给定类型表示所使用的基数或整数基底
(公开静态成员常量) |
|
[static]
|
可无更改表示的
radix
数字位数
(公开静态成员常量) |
|
[static]
|
基数的最小负幂加一,该幂是有效的规范化浮点值
(公开静态成员常量) |
|
[static]
|
基数的最大整数幂加一,该幂是有效的有限浮点值
(公开静态成员常量) |