圆周率的现代计算机求法(C语言) Label:Research

C语言求圆周率π

公式法1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <math.h>
 
int main(){
    float term,result=1;
    int n;
    for(n=2;n<=100;n+=2){
        term=(float)(n*n)/((n-1)*(n+1));
        result*=term;
    }
    printf("pi的值为:%f\n", 2*result);
     
    return 0;
}
运行结果:
pi的值为:3.141594
上面的代码,先计算π/4的值,然后再乘以4,s=-s; 用的很巧妙,每次循环,取反,结果就是,这次是正号,下次就是负号,以此类推。
 

随机数法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<stdio.h>
#include<stdlib.h>
int main(){
    double x,y;
    int m=0,n=10000000,i;
    srand(time(0));
    for(i=0;i<n;i++){
        x=(double)rand()/RAND_MAX;
        y=(double)rand()/RAND_MAX;
        if(x*x+y*y<1)m++;
    }
    printf("%lf\n",4.0*m/n);
    return 0;
}

 

800位精度

1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
long a=10000,b,c=2800,d,e,f[2801],g;
int main(){
    for(;b-c;) f[b++]=a/5;
    for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
        for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
 
    scanf("%s");
    return 0;
}

 

这个比较出名的程序,三行语句求PI

按公式PI/2 = ∑ (n! / (2n+1)!!) 计算Pi

计算2800项就可以精确到小数点后800位

正常的写法是

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "stdio.h"
long b,c,d,e,f[2801];
void main(){
  for (int i = 0; i < 2800; i++) f[i] = 2000;
  f[2800] = 0;
  for (c = 2800; c > 0; c -= 14) {
    d = 0;
    for (b = c; b > 0; b--) {
      d += f[b] * 10000;
      f[b] = d % (2*b-1);
      d /= (2*b-1);
      if (b > 1)
      d *= (b-1);
    }
    printf("%.4d", e + d / 10000);
    e = d % 10000;
  }
}

 

更多算法请参考https://www.guokr.com/blog/444081/

posted @   Radiumlrb  阅读(2906)  评论(0编辑  收藏  举报
编辑推荐:
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
阅读排行:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 用 C# 插值字符串处理器写一个 sscanf
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
历史上的今天:
2016-11-11 NOIp #2011
2016-11-11 NOIp #2010
2016-11-11 NOIp #2009
点击右上角即可分享
微信分享提示