C++中的双精度,308位还是15位?

Den*_*nis 3 c++ precision double

如果 double 可以表示最大 3.4E308(308 个零)的值,那么为什么我们说 double 只存储 15 位数字呢?说“308的十次方”有什么意义?

Fur*_*ish 12

我们不会说“double仅存储 15 位数字”。我们说“double有15位精度”。这意味着 的计算值double在打印为以 10 为基数的数字序列时,仅精确到这 15 位数字。

double 可以代表3.4E308. 是的,要打印它,您需要超过 15 位的精度。由于浮点实现,某些特定值具有这些保证。但是,例如,一个范围内的3.4E308 - 1数字就不能用a准确表示。doubledouble

如果您想确定的话,只需取 的前 15 位数字即可double。有些值可以用超过 15 位的数字正确表示,但有些则不能。double范围内的每个值都将正确表示到其十进制表示形式的第 15 位数字。