【问题标题】:Precision of single precision floating point numbers (IEEE 754 standard)单精度浮点数的精度(IEEE 754 标准)
【发布时间】:2021-10-06 21:26:09
【问题描述】:

在根据 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 个小数位精度。

【问题讨论】:

  • It is not good to think of binary floating-point formats in decimal terms. 在得出“精度为 7”的结论之前,您必须先定义“精度”的含义。有不同的方法来定义精度。 IEEE-754“单一”格式足够精确,当范围内的任何位十进制浮点数转换为二进制浮点格式并返回六位十进制浮点数时点号,结果等于起始号。有七位数的数字是不正确的。
  • IEEE-754“单一”格式当然不能保证小数点后七位精度,即小数点后七位。对于 2^24 以上的数字,只能表示整数; IEEE-754“单一”值在小数点后根本没有任何数字。

标签: floating-point binary precision ieee-754


【解决方案1】:

精度可以计算为 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 最坏情况十进制精度。


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

【讨论】:

    猜你喜欢
    • 2013-07-24
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 2014-07-25
    • 1970-01-01
    相关资源
    最近更新 更多