根据我的理解(关于我在互联网上骑的东西)似乎std::numeric_limits<double>::digits10
(double
等于15
)代表可以处理的位数double
,例如 1.23456789012345 但不是 1.234567890123456
另一方面,双精度浮点格式范围将一直持续到1.8*10^+308
,这似乎代表了一个数字,它不仅仅包含 15 位数字......
哪里不连贯?
根据我的理解(关于我在互联网上骑的东西)似乎std::numeric_limits<double>::digits10
(double
等于15
)代表可以处理的位数double
,例如 1.23456789012345 但不是 1.234567890123456
另一方面,双精度浮点格式范围将一直持续到1.8*10^+308
,这似乎代表了一个数字,它不仅仅包含 15 位数字......
哪里不连贯?
...
std::numeric_limits<double>::digits10
(double
等于 15)表示 double 可以处理的位数...
更准确地说,它是它可以在不损失精度的情况下存储的有效位数。
Python 中的示例:
1e15 == 1e15 + 1
False
1e16 == 1e16 + 1
True # loss of precision
一个是有效数字。另一个是可表示的数字范围。因此,您可以拥有:
1.23456789012345*10^308
但不是
1.234567890123456*10^308
它显示了有效数字15
和可以表示的范围。 10^308
std::numeric_limits::digits10:无需更改即可表示的位数(以十进制为基数)。