割圆术求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计算机极限,因为数值取值范围超出界限,所以后面的计算出错就不理了

相关推荐
YouonlyliveonceC2 分钟前
《大话数据结构》第4章实战:中缀表达式转后缀 + 后缀表达式求值(完整可运行实现)
算法
phoenix@Capricornus11 分钟前
从统计决策到贝叶斯估计
人工智能·算法·机器学习
AICDragon20 分钟前
1.8%就够了:K3的896个MoE专家,为什么激活率这么低反而是好事?
人工智能·算法
VALENIAN瓦伦尼安教学设备39 分钟前
ASHOOTER激光对中仪如何通过颜色确定调整是否合适
数据库·嵌入式硬件·算法
货拉拉技术40 分钟前
重塑 Agent 度量衡:基于 LLM-as-a-Judge 的离线评估体系与实践
算法·设计模式
车压1 小时前
从“为什么”理解注意力机制
算法
wabs6661 小时前
关于哈希表【力扣15.三数之和的思考】
数据结构·算法·leetcode·散列表·哈希表·三数之和
退休倒计时1 小时前
【每日一题】LeetCode 88. 合并两个有序数组 TypeScript
算法·leetcode·职场和发展·typescript
键盘会跳舞1 小时前
C++:函数对象与 std::function 源码级深度拆解——泛型算法的策略内核与可调用对象统一封装
c++·算法·仿函数
手写码匠1 小时前
华为云Flexus+DeepSeek征文|Agent 评测体系实战:用 DeepSeek-R1 当裁判,打造 Dify Agent 的自动化回归测试流水线
人工智能·深度学习·算法·aigc