通过等分三角形近似求π
程序员文章站
2024-02-21 14:36:52
...
首先考虑一个单位圆
再连接上顶点和右顶点,作这条线的垂直平分线y=x
此时y=x与单位圆有个交点,把这个点再跟(0,1)连起来
就此,我们得到一个三角形(0,1)(0,0)(sqrt(2)/2,sqrt(2)/2);
这个三角形就是我们得到的近似八分之一个单位圆面积
接下来我们只要再作中垂线,就相当于把这三角形再等分,,
重复此过程,三角形外那扇形面积就会越来越小。就行了
#include <stdio.h>
#include <math.h>
double y,a,b=0;//圆上的点是(x,y)
double x =1;
int t = 2;//分割次数
double u = 0;//半径为1的圆面积(也就是我们要求的圆周率)
int main() {
for(int i=0;i<=50;i++){
u = x*t;//以原点和(0,1)线段为底,圆上那个点的横坐标为高算三角形面积,化简
printf("%.16lf\n",u);
t*=2;//等分一次,倍数增加
a = x/2;
b = (y+1)/2;
x = a/sqrt((a*a)+(b*b));//中垂线与圆方程联立得到
y = b*x/a;
}
return 0;
}
最后只能运行到这一步,然后就溢出了
上课的时候随意想到的,可能并不是很高级,而且我只会用double算到小数点后16位。。
上一篇: Kotlin教程之基本数据类型
推荐阅读