欧拉数的计算

2024-05-19 02:54:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一些代码来生成数学常数e(欧勒数)的数字,精度可以任意

from decimal import Decimal, getcontext
import decimal

s = 300_000
n = Decimal(1)
x = Decimal(1)

print("[+] Summing numbers...")
getcontext().prec = s

for i in range(s, 1, -1):
    x *= i
    n += x

result = (n / x) + Decimal(1.0)

它的迭代次数为200k或更少,但如果我将精度设置得高于此值,则会失败

[+] Summing numbers...
Traceback (most recent call last):
  File "D:\OneDrive\Desktop\PYTHON\py\trig\log\calc e\e1_2.py", line 12, in <module>
    x *= i
decimal.Overflow: [<class 'decimal.Overflow'>]
>>> 

如何使用python存储非常大的数字,即数十万位长的数字,而不抛出十进制。溢出错误


Tags: 代码infrompyimport常数精度数字
2条回答

你的问题按计算顺序进行。看看你的求和循环:

for i in range(300000, 1, -1):
    x *= i
    n += x

这将计算出300000!(阶乘),这是您的溢出问题。您已超过十进制软件包的最大值

您需要研究所需值的连续近似值,而不是试图划分两个巨大的量

或者,您可以切换到Python大整数。这将是非常缓慢的,但你会得到你的结果

存在decimal模块,用于十进制,即基数为10的表示。对于具有任意精度数字的计算,请使用int^{}

from fractions import Fraction
s = 300_000
x = 1
n = 1

for i in range(s, 1, -1):
    x *= i
    n += x

result = Fraction(n, x) + 1
# Display approximate value (the raw value is huge)
print(float(result))  # 2.718281828459045

相关问题 更多 >

    热门问题