如何在 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,差别很大。话又说回来,这个小数字(如果您也正在使用它)对于您的整体工作可能微不足道。我们不知道,因为你只告诉我们你试图做你真正想要做的事情的一小部分。
当前我要计算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 multiplyb
, whereb = 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,差别很大。话又说回来,这个小数字(如果您也正在使用它)对于您的整体工作可能微不足道。我们不知道,因为你只告诉我们你试图做你真正想要做的事情的一小部分。