我读到过double可以存储15位数字,而float只能存储7位数字。我的问题是,这些数字是支持的小数位数还是数字中的总位数?
如果你使用 IEEE-754 浮点运算的架构(大多数架构都是这样),那么类型 float
对应于单精度,而类型 double
对应于双精度,如标准中所描述。
让我们来看一些数字:
32 位用于表示数字,其中24 位用于尾数。这意味着最低有效位(LSB)相对于 MSB 具有2^(-24)的相对值,它是“隐藏的1”,并且不会被表示。因此,对于固定的指数,可表示的最小值为指数的10^(-7.22)倍。这意味着对于以基数指数表示的数字(3.141592653589 E 25),只有“7.22”个十进制数字是有效的,在实践中至少有7个小数总是正确的。
64 位用于表示数字,其中53 位用于尾数。按照同样的推理,将2^(-53)表示为10的幂会得到10^(-15.95),这意味着至少15个小数总是正确的。
从左到右计数,无论小数点在哪里,这些都是“有效数字”的总数。超过这些数字的位数,精度就无法保证。
您列出的计数是基于10进制表示的。