我正在完成一些旧的C ++学校作业,并使用Python重新学习它们。我现在正在做一个我们必须近似sin()和cos()的任务。我正在使用我在C ++版本中使用的相同数学来更新以在Python中工作,但我得到的答案是完全不同的。我想知道是否存在一些小差异,我不知道这是导致差异的原因。我一直在使用3.14作为我的输入。
import math
def sin(x):
for n in range(4):
ans = 0
ans += (math.pow(-1, n)/math.factorial(2 * n + 1)) * math.pow(x, 2 * n + 1)
print ans
def cos(x):
for n in range(4):
ans = 0
ans += (math.pow(-1, n)/math.factorial(2 * n)) * math.pow(x, 2 * n)
print ans
while True:
try:
x = float(raw_input("Please enter a number: "))
break
except ValueError:
print "Oops! That was not a valid number. Try again..."
sin(x)
cos(x)
我认为值得注意的是,如果我使用math.pow(-1, n)
与-1**n
,我会得到不同的答案。
答案 0 :(得分:4)
您在循环中设置了ans = 0
,因此您打印的是一个术语而不是总和。尝试:
def sin(x):
ans = 0
for n in range(4):
ans += (math.pow(-1, n)/math.factorial(2*n + 1)) * math.pow(x, 2*n + 1)
print ans
等。这似乎产生了正确的结果。
此外,返回值的功能更有意义,而不仅仅是打印它们:
def sin(x, terms=4):
ans = 0
for n in range(terms):
ans += (math.pow(-1, n)/math.factorial(2*n + 1)) * math.pow(x, 2*n + 1)
return ans
或:
def sin(x, terms=4):
return sum(
(-1.)**n / math.factorial(2*n + 1) * math.pow(x, 2*n + 1)
for n in range(terms))
然后你会在脚本的末尾print sin(x)
。