gpt4 book ai didi

floating-point - 是否有任何二进制值没有精确的十进制表示?

转载 作者:行者123 更新时间:2023-12-02 02:01:42 25 4
gpt4 key购买 nike

我们都知道在十进制中有些值在二进制中没有精确的表示。

例如十进制值0.1

在 IEEE 浮点格式中,它可以有不同的表示形式,具体取决于您要专用于表示浮点值的位数。

单精度(32 位)

  • 十六进制:0x3DCCCCCD
  • 二进制:1.10011001100110011001101×10-4
  • 十进制:0.10000 00014 90116 11938 47656 25

double (64 位)

  • 十六进制:0x3FB999999999999A
  • 二进制:1.1001100110011001100110011001100110011001100110011010×10-4
  • 十进制:0.10000 00000 00000 00555 11151 23125 78270 21181 58340 45410 15625

扩展精度(80 位)

  • 十六进制:0x3FFBCCCCCCCCCCCCCCCD
  • 二进制:1.100110011001100110011001100110011001100110011001100110011001101×10-4
  • 十进制:0.10000 00000 00000 00000 13552 52715 60688 05425 09316 00108 74271 39282 22656 25

换句话说,十进制值0.1在二进制中没有精确的表示,它是无限重复的值:

0.0 0011 0011 0011 0011 0011 0011 0011 0011 ...
0.0 ̅0̅0̅1̅1

以同样的方式,1⁄3 没有精确的十进制表示 - 它在“小数点” 之后的数字永远重复:

0.33333 33333 33333 33333 33333 33333 33333 ...
0.̅3

但它会走向另一条路吗?

是否有任何二进制值在十进制中没有精确表示?

我为什么要问?扩展理解的范围,增加人类知识的总和。

编辑:我不知道为什么当链接的问题与我的问题完全相反时,有人投票将其作为重复项关闭。

最佳答案

不,每个二进制 float 都有十进制的精确表示。

能用二进制 float (位数有限)精确表示的数,正是那些能用2的幂的分母写成的有理数,即x = a/2n 用于整数 an

能用二进制 float (位数有限)精确表示的数,正是那些能用10的次方分母写成的有理数,即y = b/10n

但是第一类中的每个数字也属于第二类,因为 a/2n = a•5n/10n.

更一般地,当且仅当 的每个质因数在基数 u 中具有精确表示的每个数字在基数 v 中也将具有精确表示u 也是v 的质因数。这将确保 1/un 可以写成 a/vm 对于一些 am

这解释了不对称性:2 是质数,10 的质因数是 2 和 5。因此 2 的每个质因数都是 10 的质因数,但反之则不然。

关于floating-point - 是否有任何二进制值没有精确的十进制表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68943707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com