首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python:计算\$e\$

Python:计算\$e\$
EN

Code Review用户
提问于 2019-03-24 15:37:02
回答 1查看 252关注 0票数 -4

我试图解决一个问题,它说:

计算在e的连续数字中找到的前10位素数。

我能够解决这个问题,但我使用了大约10k位数的在线电子。所以我试着写了一个计算e位数的程序,问题是它只是给出了不正确的答案。

我使用的代码和公式如下:

e = \sum\limits_{n=0}^{\infty}\frac{1}{n!} = \frac{1}{1} + \frac{1}{1} + \frac{1}{1 \cdot 2} + \frac{1}{1\cdot 2 \cdot 3} + \cdots
代码语言:javascript
运行
复制
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,这是不正确的。

有人能解释为什么我的代码没有产生正确的结果吗?

EN

回答 1

Code Review用户

回答已采纳

发布于 2019-03-24 16:28:14

首先,不要惊慌。10是不够的(实际上,它只提供给您小数点5位。尝试20,并获得

代码语言:javascript
运行
复制
2.71828182846

这更近了。

现在,Python使用了一个本机浮点,它可能只给出那么多数字的精度(例如,30)。要获得更多信息,您需要使用另一种表示形式;fractions.Fraction看起来是一个很好的候选。

最后,对math.factorial的调用浪费了太多的计算能力。当你走的时候,最好是计算阶乘。

代码语言:javascript
运行
复制
    denom = 1
    for i in range(1, x):
        e += 1 / denom
        denom *= i
票数 11
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/216116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档