没有得到正确答案的正弦与否Python中的余弦

时间:2013-12-02 17:47:15

标签: python python-2.7 trigonometry

我正在完成一些旧的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,我会得到不同的答案。

1 个答案:

答案 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)