请问这个代码怎么写呢?

img


我换了while和for循环都没办法写出来,最重要的是我不是很理解当前项减去前一项该怎么算?


#!/usr/bin/env python
# -*- coding:utf-8 -*-

if __name__ == '__main__':
    n = 1
    # 最近一次的pi值
    last_pi = 0
    # 当前的pi值
    pi = 4
    while abs(pi - last_pi) > 10 ** -6:
        last_pi = pi
        # 更新pi的值
        pi = pi + (-1) ** n * (4 / (2 * n + 1))
        n = n + 1
    print(pi)

欢迎采纳,谢谢~

e = 0.000001
S0 =  4.0 / 1.0
i = 3.0
while True:
    S0 = S0 - 4.0 / i
    i += 2
    S1 = S0 + 4.0 / i
    if S1 - S0 <= e:
        print(S0) 
        break
    #else:
    #    print(S1 - S0)

应该是当前和与前一次和的差的绝对值小于1e-6吧?这个级数收敛好慢,我试了一下1e-8,居然要循环两亿次。

>>> def get_pi(xi=1e-6):
    pi, n = 0, 1
    while True:
        delta = 4/(2*n-1) if n%2 else -4/(2*n-1)
        pi += delta
        if abs(delta) < xi:
            return pi, n
        else:
            n += 1

            
>>> get_pi()
(3.1415931535894743, 2000001)
>>> get_pi(1e-8)
(3.1415926585894076, 200000001)

#include <stdio.h>
#include <math.h>

int main()
{
    int i = 1;
    double pi = 0, e, d = 1.0;
    scanf("%lf", &e);
    while (d >= e){
        d = 1.0 / i / i;
        pi += d;
        i++;
    }
    pi = sqrt(pi * 6);
    printf("%lf", pi);
    return 0;
}