分页: 1 / 1
pi的两个近似公式
发表于 : 2023年 7月 5日 23:00
由 (ツ)
第一个
pi/4 = 1 - 1/3 + 1/5 - 1/7 + 1/9 - ...
第二个
pi/6 = w - 1/3 * w^3 + 1/5 * w^5 - 1/7 * w^7 +...., w = 1/sqrt(3)
第二个收敛速度要快很多啊,大约10~20项就差不多了,第一个要10000项才能跟第二个差不多的误差.
提供code懒人包
代码: 全选
N = 10000;
multiplier = 1;
sum = 0;
for i = 1 : N
sum = sum + multiplier / (2 * i - 1);
multiplier = -multiplier;
end
sum = sum * 4
代码: 全选
N = 20;
multiplier = 1;
w = 1/sqrt(3);
sum = 0;
for i = 1 : N
order = 2 * i - 1
sum = sum + multiplier * w^order / order;
multiplier = -multiplier;
end
sum = sum * 6
Re: pi的两个近似公式
发表于 : 2023年 7月 5日 23:07
由 TheMatrix
这好像不是python.
Re: pi的两个近似公式
发表于 : 2023年 7月 5日 23:08
由 randomatrices
这俩个都不行吧. 最快的是用椭圆函数, AGM那些, 一步4位精度,俩步就到八位。现在pi 已经算到万亿位了吧, 谁会用这俩个初级的东西?
Re: pi的两个近似公式
发表于 : 2023年 7月 6日 10:31
由 verdelite
Re: pi的两个近似公式
发表于 : 2023年 7月 6日 14:39
由 TheMatrix
Re: pi的两个近似公式
发表于 : 2023年 7月 6日 21:48
由 取诸怀抱
顺手改成python。
代码: 全选
N = 10000;
multiplier = 1;
sum = 0;
for i in arange(1, N):
sum = sum + multiplier / (2 * i - 1);
multiplier = -1*multiplier;
sum = sum * 4
print(sum)
代码: 全选
N = 20;
multiplier = 1;
w = 1/sqrt(3);
sum = 0;
for i in arange(1, N):
order = 2 * i - 1
sum = sum + multiplier * w**order / order;
multiplier = -multiplier;
sum = sum * 6
print(sum)
Re: pi的两个近似公式
发表于 : 2023年 7月 6日 21:51
由 SunnyA
Re: pi的两个近似公式
发表于 : 2023年 7月 6日 23:09
由 (ツ)
取诸怀抱 写了: 2023年 7月 6日 21:48
顺手改成python。
代码: 全选
N = 10000;
multiplier = 1;
sum = 0;
for i in arange(1, N):
sum = sum + multiplier / (2 * i - 1);
multiplier = -1*multiplier;
sum = sum * 4
print(sum)
代码: 全选
N = 20;
multiplier = 1;
w = 1/sqrt(3);
sum = 0;
for i in arange(1, N):
order = 2 * i - 1
sum = sum + multiplier * w**order / order;
multiplier = -multiplier;
sum = sum * 6
print(sum)
帮你改改
代码: 全选
import math
N = 100
indices = list(range(N))
print(sum([1 / (i * 2 + 1) if i % 2 == 0 else -1 / (i * 2 + 1) for i in indices]) * 4)
w = 1 / math.sqrt(3)
print(sum([w**(i * 2 + 1) / (i * 2 + 1) if i % 2 == 0 else -w**(i * 2 + 1) / (i * 2 + 1) for i in indices]) * 6)
再补一个超简洁版
代码: 全选
sum [(-1) ** x / (x * 2 + 1) | x <- [0..100]] * 4
代码: 全选
sum [(-1) ** x / (x * 2 + 1) * ((1 / (sqrt 3)) ** (x * 2 + 1)) | x <- [0..10]] * 6
Re: pi的两个近似公式
发表于 : 2023年 7月 7日 10:32
由 SunnyA
(ツ) 写了: 2023年 7月 6日 23:09
帮你改改
代码: 全选
import math
N = 100
indices = list(range(N))
print(sum([1 / (i * 2 + 1) if i % 2 == 0 else -1 / (i * 2 + 1) for i in indices]) * 4)
w = 1 / math.sqrt(3)
print(sum([w**(i * 2 + 1) / (i * 2 + 1) if i % 2 == 0 else -w**(i * 2 + 1) / (i * 2 + 1) for i in indices]) * 6)
再给你改改:
sum((-1)**(n+1)/(2*n-1) for n in range(1,1000000))*4