gpt4 book ai didi

Python小 float ——算术精度

转载 作者:行者123 更新时间:2023-12-04 14:01:53 27 4
gpt4 key购买 nike

如果我在 python 3 中运行以下代码

1.0 + 1e-16

我明白了

1.0

结果。我想知道为什么?假设数字存储为 IEE754 double (64 位),那么我有这些数字的以下表示形式:

1 号:

  • 签名:0
  • 指数:01111111111 --> 1023 作为十进制数
  • 有效数:0...0

1e-16 号:

  • 签名:0
  • 指数:01111001101 --> 973 作为十进制数
  • 有效数:0010000000111010111110011110111001110101011000010110

为了将两个数字相加,我必须将小数的指数增加 50 以适应数字 1.0 表示的指数。如果我这样做,尾数将变为:

  • 0.0...0100

添加两个尾数后我的结果应该是:

  • 签名:0
  • 指数:01111111111
  • 有效位:0000000000000000000000000000000000000000000000000100

这不等于 1.0。有人可以解释或提示我忽略了什么吗?

最佳答案

您将 1e-16 转换为二进制似乎不正确:float.hex(1e-16) 生成 0x1.cd2b297d889bcp-54,这意味着(无偏) 十进制指数是 -54,而不是 -50。然后前导 1 从有效数字的末尾掉落,你最终得到零。

关于Python小 float ——算术精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69757332/

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