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


    C语言求圆周率π

    公式法1

    #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
    ", 2*result);
        
        return 0;
    }
    运行结果:
    pi的值为:3.141594
    上面的代码,先计算π/4的值,然后再乘以4,s=-s; 用的很巧妙,每次循环,取反,结果就是,这次是正号,下次就是负号,以此类推。
     

    随机数法

    #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
    ",4.0*m/n);
        return 0;
    }
    

    800位精度

    #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位

    正常的写法是

    #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/

  • 相关阅读:
    kerberos和hadoop的集成
    kerberos的原理
    Impala与Hive的异同
    为什么hdfs不适合存储小文件
    猛犸数据质量
    CIO的发展之路
    企业数据能力测评:认清现状,布局未来
    企业架构的演变
    其实,他只是个没长大的孩子【复制知乎
    看着自己之前写的便签,想笑
  • 原文地址:https://www.cnblogs.com/radiumlrb/p/9944062.html
Copyright © 2020-2023  润新知