Ошибка в оценке числа Пи по разложению Тейлора - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь вычислить значение числа пи, но в моей логике есть какая-то семантическая ошибка, которую я не могу понять.

def taylor(precision):
    iter = 1
    sum = 0
    fx = 100
    sign = 1

    while (abs(fx) > precision):

        if not iter % 2 == 0:
            print(sign)
            sum += ((1 / (iter)) * sign)

        my_pi = 4 * (sum)
        fx = math.pi - my_pi
        iter += 1
        sign *= -1

    return my_pi

Это приводит к бесконечному циклу.

Я должен использовать эту серию и найти my_pi с определенной точностью:

π / 4 = (1/1) - (1/3) + (1/5) - (1/7) + (1/9) - ...

Довольно новичок в программировании, любая помощь будет потрясающей!

1 Ответ

1 голос
/ 20 марта 2019

Эта часть здесь

if not iter % 2 == 0:

означает, что вы суммируете только тогда, когда итерация не является четным числом, т. Е. 1, 3, 5, .... Однако вы чередуете знак на каждой итерации, включаячто из четных итераций.

В результате вы получите 1/1 + 1/3 + 1/5 + ....

Вместо этого попробуйте

        if not iter % 2 == 0:
            print(sign)
            sum += ((1 / (iter)) * sign)
            sign *= -1 # move the sign assignment here
...