gpt4 book ai didi

Python 和非常小的小数

转载 作者:太空狗 更新时间:2023-10-30 00:28:06 25 4
gpt4 key购买 nike

关于在 macosx 上运行的 Python 2.7.6 的有趣事实:

你有一个非常小的数字,比如:

0.000000000000000000001

您可以将其表示为:

>>> 0.1 / (10 ** 20)
1.0000000000000001e-21

但是最后可以看到浮点错误。我们真正拥有的是这样的东西:

0.0000000000000000000010000000000000001

所以我们得到了一个数字错误,但没关系。问题如下:

正如预期的那样:

>>> 0.1 / (10 ** 20) == 0
False

但是,等等,这是什么?

>>> 0.1 / (10 ** 20) + 1 == 1
True

>>> repr(0.1 / (10 ** 20) + 1)
'1.0'

看起来 python 使用另一种数据类型来表示我的数字,因为这只发生在使用第 16 位十进制数字等时。另外,为什么 python 决定在添加时自动将我的号码变为 0?我不应该处理小数部分非常小且有浮点错误的十进制数吗?

我知道这个问题可能属于浮点错误,解决方案通常是不要相信这种计算的 float ,但我想了解更多关于下面发生的事情引擎盖。

最佳答案

考虑当您尝试将 7.00 和 .001 相加并且只允许使用三位数作为答案时会发生什么。不允许使用 7.001。你是做什么的?

在您可以返回的值中,例如 6.99、7.00 和 7.01,最接近正确答案的是 7.00。因此,当要求将 7.00 和 .001 相加时,您返回 7.00。

当您要求计算机将 1e-21 和 1 附近的数字相加时,计算机会遇到同样的问题。它只有 53 位可用于浮点值的小数部分,而 1e-21 几乎是 70 位低于 1。因此,它会将正确的结果四舍五入为最接近的值 1,然后返回该值。

关于Python 和非常小的小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21535604/

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