在根据 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。经过 125 步到达下一个 float
后,值为 8590080000.0f
。但这是 1000.0 的 128 步。该范围内的一些 7 个有效小数不能明确表示为 float
。
某些
float
的独特性有效小数位数少于 7 位。
使用
floor((24-1) * log10(2))
--> 6 确定常见的 float
最坏情况小数精度,或者对于 general中的
float
,使用 FLT_DIG
。
*1
log10(pow(2,23))
--> 6.9...是更好的近似值。