我试图解决一个问题,它说:
计算在e的连续数字中找到的前10位素数。
我能够解决这个问题,但我使用了大约10k位数的在线电子。所以我试着写了一个计算e位数的程序,问题是它只是给出了不正确的答案。
我使用的代码和公式如下:
import math
e=0
x=int(input()) #larger this number, more will be the digits of e
for i in range(x):
e+=(1/(math.factorial(i)))
print(e)
当用户输入10时,返回的数字为2.7182815255731922,这是不正确的。
有人能解释为什么我的代码没有产生正确的结果吗?
发布于 2019-03-24 08:28:14
首先,不要惊慌。10是不够的(实际上,它只提供给您小数点5位。尝试20,并获得
2.71828182846
这更近了。
现在,Python使用了一个本机浮点,它可能只给出那么多数字的精度(例如,30)。要获得更多信息,您需要使用另一种表示形式;fractions.Fraction
看起来是一个很好的候选。
最后,对math.factorial
的调用浪费了太多的计算能力。当你走的时候,最好是计算阶乘。
denom = 1
for i in range(1, x):
e += 1 / denom
denom *= i
https://codereview.stackexchange.com/questions/216116
复制