gpt4 book ai didi

python - 在 Python 中处理非常非常小的数字

转载 作者:行者123 更新时间:2023-12-04 11:46:39 25 4
gpt4 key购买 nike

我需要乘以大约 1e6数量级为 0.01 .预期结果是订单 1e-100000000 .显然,典型的浮点运算无法处理这个问题。

在网上做了一些研究,我发现了 decimal library这似乎解决了这个问题。然而,它似乎有一些限制,使其无法满足我的需求:

>>> Decimal('.01')**Decimal('1e5') # Seems to handle this
Decimal('1E-200000')
>>> Decimal('.01')**Decimal('1e5')*Decimal('1E200000') # Yeah! It works!
Decimal('1')
>>> Decimal('.01')**Decimal('1e6') # This result is strange...
Decimal('0E-1000026')
>>> Decimal('.01')**Decimal('1e6')*Decimal('0E1000026') # Wrong result
Decimal('0')

有谁知道任何解决方案?

最佳答案

你的结果不正确,因为小数也有精度(小数是定点数学),所以你在这里也有下溢问题:

Decimal('.01')**Decimal('1e6')

Decimal('0E-1000026')



但:
getcontext().prec = 1000000000   # sets precision to 1000000000
Decimal('.01')**Decimal('1e6')

Decimal('1E-2000000')



您可以通过手动设置精度(如上例所示)或手动计算功率来解决您的问题,例如:
Decimal('.01')**Decimal('1e6')

可以转换为
Decimal('1e-2') ** Decimal('1e6')

后来到
1 ** ((-2) ** 1e6) = 1 ** (-2000000)

Decimal module documentation

关于python - 在 Python 中处理非常非常小的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58784244/

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