如何在 Python3 中获取 0.5^(5000) 的值?

How to get value for 0.5^(5000) in Python3?

当前我要计算a=0.5**5000的值。我知道a是一个非常小的值,但我需要用a乘以b,其中b = 5000!是一个非常大的值。

但是当我计算a=0.5^5000的值时,结果是0。有没有人有解决这个问题的好方法?谢谢!

使用十进制:

from decimal import Decimal

if __name__ == '__main__':
    a = Decimal(str(0.5)) ** Decimal(str(5000))
    print(a)

7.079811261048172892385615159E-1506

试试十进制模块:

>>> from decimal import Decimal
>>> print(Decimal("0.5") ** 5000)
7.079811261048172892385615159E-1506
>>> 

这是使用 mpmath library 的替代答案:

import mpmath

a = mpmath.power(0.5, 5000)
b = mpmath.factorial(5000)
c = mpmath.fmul(a, b)

print(a)
print(b)
print(c)

这包括您提到的其他计算。

输出:

7.0798112610481728923856151586941e-1506
4.2285779266055435222010642002336e+16325
2.9937533623001661362907254353912e+14820

I need use a to multiply b, where b = 5000!

我就分5000! 25000 或移动它:

from math import factorial

print(factorial(5000) // 2**5000)
print(factorial(5000) >> 5000)

输出:

299375336...(more than 14000 digits)...080261230

或者正如@wim 指出的那样,fractions.Fraction 是准确的:

print(Fraction(factorial(5000), 2**5000))

输出:

958001075...(more than 14000 digits)...568359375/32

十进制表示为:

299375336...(more than 14000 digits)...080261230.46875

所以在这种情况下,这只给了我们五位数的精度,与已经超过 14000 相比并不多。但是例如 5!/25 它将是 3.75而不是3,差别很大。话又说回来,这个小数字(如果您也正在使用它)对于您的整体工作可能微不足道。我们不知道,因为你只告诉我们你试图做你真正想要做的事情的一小部分。