割圆术求Pi值的重新验证

割圆术求Pi值的重新验证

早通知 2026-02-21

忽然,想到,如果假设臆想想像幻想自已是祖冲之,谐音早通知,当如何重新验证割圆术求Pi的近似值???这是自已出题自已做,就象读书考试,自已出题自已做,如何???分不清啥叫原创,这百度找得到么,找不如自制?不是原创,闭门造车,原创耶,非原创耶,不理了,自制出来看下就行了,不理原创不原创,无利可图,管什么原不原,圆不圆?

设圆周长C,半径为1,圆周率Pi=C/2,当特例为一点时,P1=1,当特例为两点时,数轴原点正负,一来一回包围为线上圆,P2=2,当三点为正三角形内接圆时,P3=C/2=6*sqr(1*1-0.5*0.5)/2=3*sqr(0.75)=2*sqr3=1.5*1.732...=2.598...

当四点为正方形内接圆时,p4=C/2=4*sqr2/2=2*1.414...=2.828...,当五点圆内接正五边形时,暂不理,当六点圆内接正六边形时,网上讲正是祖冲之的起点,为P6=3。而我这里,将不从正六边形开始,而从正四边形开始,加倍割圆术,只有P2,P4,P8...P(2^n)....,趋于极限PI,跳过正五边,正六边,正七边等等,结果一样的,且下标记之,仍是,P1,P2,P3...Pi...实际上是P(2^0),P(2^1),P(2^2),P(2^3)....得到递推公式/递归公式/通项公式,就可以电脑求解乎???

如图所示,圆心O,半径1,设n时正2^n多边形周长为Pn,n+1时,正2^(n+1)多边形周长为P(n+1),勾股定理/毕达哥拉斯定理/商高定理,得到,AB=P(n+1)/2^(n+1),因为正2^(n+1)多边形周长P(n+1)除以边数2^(n+1),AD=AC/2=Pn/2^n/2=Pn/2^(n+1),

OD=sqr(AO*AO-AD*AD)=sqr(1-Pn*Pn/4^(n+1)), DB=OB-OD=1-OD,2^(n+1)

算法一:勾股定理/毕达哥拉斯定理/商高定理

AB=sqr(AD*AD+DB*DB)=sqr(AD*AD+(1-OD)*(1-OD))=sqr(AD*AD+1+OD*OD-2OD)=sqr(1+1-2OD)=sqr2*sqr(1-OD)

算法二:角的正弦值相同

DB/AB=AB/BE,AB=sqr(DB*BE)=sqr((1-OD)*2)

所以,P(n+1)/2^(n+1)=sqr2*sqr(1-OD) =sqr2*sqr(1-sqr(1-Pn*Pn/4^(n+1)))

算法三:角的余弦值相同,解二次方程求根公式韦达定理

AD/AB=AE/EB,AD=Pn/(2^(n+1)),AB=P(n+1)/(2^(n+1)),AE=sqr(EB*EB-AB*AB)=sqr(4-AB*AB),EB=2r=2,

代入得:AD/AB=sqr(4-AB*AB)/2, AB*AB*AB*AB-4AB*AB+4AD*AD=0,解二次方程求根公式韦达定理,AB*AB=(-1/2)*(4+-sqr(16-4*4AD*AD))=2*(-1+-sqr(1-AD*AD))所以, AB=sqr(2)*sqr(-1+-sqr(1-AD*AD))

P(n+1)/2^(n+1)=sqr(2)*sqr(-1+-sqr(1-AD*AD))=sqr2*sqr(-1+-sqr(1-Pn*Pn/4^(n+1)))

「结论」:递推公式:P(n+1)=2^(n+1)*sqr2*sqr(1-sqr(1-Pn*Pn/4^(n+1))),P2=2*sqr2.

编写代码以验证之:

procedure TForm1.Button1Click(Sender: TObject);

var

i:integer;

pi,ci:double;

begin

ci:= sqrt(2)*4;

pi:=ci/2; //P(n+1)=2^(n+1)*sqr2*sqr(1-sqr(1-Pn*Pn/4^(n+1)))

for i:=2 to 11 do

begin

ci:=power(2,(i+1))*sqrt(2)*sqrt(1-sqrt(1-ci*ci/(power(2,(i+1))*power(2,(i+1))))) ;

pi:=ci/2;

end;

self.caption:= floattostr(pi);

end;

procedure TForm1.Button1Click(Sender: TObject);

var

i:integer;

pi,ci,adad,odod,db:double;

begin

ci:=sqrt(2)*4; //P(n+1)=2^(n+1)*sqr2*sqr(1-sqr(1-Pn*Pn/4^(n+1)))

pi:=ci/2;

application.ProcessMessages;

for i:=2 to 13 do

begin

if i=13 then application.ProcessMessages;

adad:= ci*ci/(power(2,(i+1))*power(2,(i+1)));

odod:= sqrt(1-adad);

ci:=power(2,(i+1))*sqrt(2)*sqrt(1-odod) ;

pi:=ci/2;

//i=12 pi=3.1415925765450043

//i=13 pi=3.1415926334632482

//i=14 pi=3.1415926548075896

self.caption:= floattostr(pi);

application.ProcessMessages; //sleep....

end;

pi:=ci/2;

self.caption:= floattostr(pi);

application.ProcessMessages;

end;

证实这通项公式是对的,在n=13,14时达到普通PC计算机极限,因为数值取值范围超出界限,所以后面的计算出错就不理了

相关推荐
2301_8227032014 分钟前
鸿蒙flutter三方库实战——教育与学习平台:Flutter Markdown
学习·算法·flutter·华为·harmonyos·鸿蒙
Jia ming25 分钟前
C语言实现日期天数计算
c语言·开发语言·算法
无限进步_1 小时前
【C++&string】大数相乘算法详解:从字符串加法到乘法实现
java·开发语言·c++·git·算法·github·visual studio
苏纪云1 小时前
蓝桥杯考前突击
c++·算法·蓝桥杯
W23035765731 小时前
经典算法详解:最长公共子序列 (LCS) —— 从暴力递归到动态规划完整实现
算法·动态规划·最长子序列
pzx_0011 小时前
【优化器】 随机梯度下降 SGD 详解
人工智能·python·算法
小肝一下2 小时前
每日两道力扣,day8
c++·算法·leetcode·哈希算法·hot100
无限进步_2 小时前
【C++】验证回文字符串:高效算法详解与优化
java·开发语言·c++·git·算法·github·visual studio
Meme Buoy2 小时前
18.补充数学1:生成树-最短路径-最大流量-线性规划
数据结构·算法
paeamecium2 小时前
【PAT甲级真题】- Count PAT‘s (25)
c++·算法·动态规划·pat考试·pat