通过等分三角形近似求π

首先考虑一个单位圆
在这里插入图片描述
再连接上顶点和右顶点,作这条线的垂直平分线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位。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值