单精度浮点数的精度IEEE 754 标准

问题描述

在符合 IEEE 754 标准的数字的单精度浮点表示中,我们使用 24 位作为尾数部分(23 位 + 1 个隐含位)。所以精度可以计算为 2^24 = 10^x 其中 x 可以通过取两边的 log 计算为 24log 2 = xlog 10 => x= 7.2 ~ 7。由此我们可以得出结论,精度在十进制系统中是 7,但值 7 表明我们有 7 个有效小数位的精度,或者我们有 7 个小数位精度?是否被认为是 7 位十进制数字(总共)或最多 7 位小数精度的十进制数。

解决方法

精度可以计算为 2^24 = 10^x ...

由此我们可以得出结论,精度在十进制系统中是 7,但值 7 表明我们有 7 个有效小数位的精度还是我们有 7 个小数位精度?

是否被认为是 7 位十进制数字(总共)或最多 7 位小数精度的十进制数。

没有

7 可能作为粗略精度的近似值*1,但浮点数并没有完全以统一的对数方式分布,因此“取对数”失败。


对于典型的 float,有 223 或 8,388,608 个值,线性分布在 [1.0 … 2.0] 范围内。同样对于范围 [0.125 ... 0.5),[128.0 ... 256.0),...

文本为精度为 7 的小数,有 9*106 或 9,000,000 个值线性分布在范围 [1.0 ... 10.0) 和其他几十年.

问题是这些范围并不总是对齐以区分 7 个有效小数位。

考虑8589952000.0f。下一个 float 距离 1024.0,而下一个 7 位有效小数点距离 1000.0。到下一个 float 125 步后,值为 8590080000.0f。但那是 1000.0 的 128 步。该范围内的某些 7 位有效小数无法用 float 来特别表示。

某些 float 的显着性小数位数少于 7 位。

使用 floor((24-1) * log10(2)) --> 6 确定常见的 float 最坏情况十进制精度。


*1log10(pow(2,23)) --> 6.9... 是一个更好的近似值。