#!/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;
}