欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

通过等分三角形近似求π

程序员文章站 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位。。