当我有大量输入时,我的代码以 OverflowError 结尾
my code ends with OverflowError when I have large inputs
我的一道作业题,只能导入pi
题目要求通过泰勒级数计算余弦函数,我目前已经完成了。我得到的输出是正确的,但是当 k 大于 90 时,我得到 OverflowError: int too large to convert to float.
from math import pi
def myCos(angle,k):
total=0
for i in range(k):
total += (((-1)**(i))*((angle*pi/180)**(2*(i))))/(fact(2*(i)))
return total
def fact(n):
if n == 0:
return 1
else:
return fact(n-1)*n
为了这道题得满分,代码必须接受k > 100。
即
myCos(45,5)
0.7071068056832942
myCos(45,60)
0.7071067811865475
myCos(45,90)
total += (((-1)**(i))*((angle*pi/180)**(2*(i))))/(fact(2*(i)))
OverflowError: int too large to convert to float
有人可以请教我这个吗?
您在总和中的主要除法超出了float
类型的范围。要进行除法,您必须将分母转换为类型 float
。 fact(2*85)
大于最大 float
值。
以不同的顺序进行操作。例如:
numer = (angle*pi/180)**(2*(i))
for denom in range(1, 2*i + 1):
numer /= denom
现在 numer
是所需值的合理 (?) 表示。如果您需要更好的可靠性,"chunk" 分母值除以 10 组 denom
值的乘积。
def myCos(angle,k):
total=0
for i in range(k):
numer = (angle*pi/180)**(2*(i))
for denom in range(2, 2*i+1):
numer /= denom
total += (-1) ** i * numer
return total
print(myCos(45,5))
print(myCos(45,60))
print(myCos(45,90))
输出:
0.7071068056832942
0.7071067811865475
0.7071067811865475
我的一道作业题,只能导入pi
题目要求通过泰勒级数计算余弦函数,我目前已经完成了。我得到的输出是正确的,但是当 k 大于 90 时,我得到 OverflowError: int too large to convert to float.
from math import pi
def myCos(angle,k):
total=0
for i in range(k):
total += (((-1)**(i))*((angle*pi/180)**(2*(i))))/(fact(2*(i)))
return total
def fact(n):
if n == 0:
return 1
else:
return fact(n-1)*n
为了这道题得满分,代码必须接受k > 100。
即
myCos(45,5)
0.7071068056832942
myCos(45,60)
0.7071067811865475
myCos(45,90)
total += (((-1)**(i))*((angle*pi/180)**(2*(i))))/(fact(2*(i)))
OverflowError: int too large to convert to float
有人可以请教我这个吗?
您在总和中的主要除法超出了float
类型的范围。要进行除法,您必须将分母转换为类型 float
。 fact(2*85)
大于最大 float
值。
以不同的顺序进行操作。例如:
numer = (angle*pi/180)**(2*(i))
for denom in range(1, 2*i + 1):
numer /= denom
现在 numer
是所需值的合理 (?) 表示。如果您需要更好的可靠性,"chunk" 分母值除以 10 组 denom
值的乘积。
def myCos(angle,k):
total=0
for i in range(k):
numer = (angle*pi/180)**(2*(i))
for denom in range(2, 2*i+1):
numer /= denom
total += (-1) ** i * numer
return total
print(myCos(45,5))
print(myCos(45,60))
print(myCos(45,90))
输出:
0.7071068056832942
0.7071067811865475
0.7071067811865475