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

double precision in C++, 308 digits or 15 digits?

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

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

double可以表示3.4E308。是的,要打印它,您需要 15 位以上的精度。由于 floating-point 实施,某些特定值具有这些保证。 但是,例如,一个数字3.4E308 - 1double的范围内,不能 准确地 表示为 double.

如果要确定,直接取double的前15位即可。有些值可以用 15 位以上的数字正确表示,但有些则不能。 double 范围 中的每个值都将 正确表示到其十进制表示形式的第 15 位。

为了帮助简单理解这一点,请考虑可以表示以下数字的数字类型:

-100000
-100
-9
-8
-7
-6
-5
-4
-3
-2
-1
0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+100
+100000

该类型最多可表示 100000 个数字。此类型的精度是 6 位还是 1 位?