我的作业是编写一个代码,其中包含一个计算 sinx 泰勒级数并返回数量的函数。 该函数必须得到 (n,k),其中 n 是正弦的请求数,k 是函数必须在点后计算的数字。 首先我忽略了k,因为它很容易限制点后的数字,并写了一个只计算sinx taylor的函数,所以我给它一个特定范围的r(r是泰勒级数的每一句话):
def taylor(n,k):
s= ((math.pi)/180)*n
ex = s
sign = 1
factorial = 1
sum=0
i=1
r=1
while r>0.00000000000000000001 or r<0.0000000000000000000001 :
r= ex*sign/factorial
ex = ex*s*s
sign = sign*(-1)
factorial=factorial*(i+1)*(i+2)
i= i+2
sum = sum + r
return sum
import math
print(taylor(45,1))
我只是不知道为什么如果我将 r 的数量设置为大于此值(即 0.1),我会收到此错误:
Traceback (most recent call last):
File "/Users/modern/Desktop/taylor.py", line 22, in <module>
print(taylor(45))
File "/Users/modern/Desktop/taylor.py", line 12, in taylor
r= ex*sign/factorial
OverflowError: int too large to convert to float
最佳答案
我很惊讶这是一个问题,因为我认为 r
在成为问题之前会低于容错。
请注意,您真正需要的是阶乘的倒数。您可以使用一个初始化为 fact_recip
的变量,而不是使用阶乘变量来除以
fact_recip = 1.0
像 r= ex*sign*fact_recp
一样使用
并通过
更新fact_recip /= ((i+1)*(i+2))
这将处理您看到的错误,但我不确定舍入错误是否会成为问题。
关于python - 搜索我为计算泰勒级数而编写的代码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33616156/