怎么通过C语言求π的值

img


根据这个公式怎么用C语言求π?n的取值要求条件是怎么样的呀?还有其他的条件吗?

供参考:

#include<stdio.h>
int main()
{
    int  i = 0;
    double pi = 0,tmp = 1.0;
    while(tmp >= 1e-6)
    {
        tmp = 1.0/(i*2+1);
        if(i % 2)
             pi -= tmp;
        else
             pi += tmp;
        i++;
    }
    printf("%.6f\n",pi * 4.0);
    return 0;
}

n不是输入的,而是在判断某一项是否小于10的-6次方停止计算来结束

#include<stdio.h>
#include<math.h>
int main()
{
    int  i = 1;
    double pi = 0,tmp = 1.0;
    while(tmp >= 1e-6)
    {
        tmp = 1.0/(i*i);
        if(tmp < 1e-6)
            break;
        pi += tmp;
        i++;
    }
    printf("%.3f\n",sqrt(pi * 6.0));
    return 0;
}
 

六分之π的平方那个,求解到最后一项小于10的-12次时,已经求出了π的近似值;

二分之π那个,经测试发现,n取较大的值,和π的值越接近。

测试代码如下:

参考链接:


C++学习(一三九)float、double的有效数字_c++ float 几位_hankern的博客-CSDN博客 具体参考《IEEE标准754》结论为:float有效数字位为6 – 7位,第7位不一定有效,字节数为4,指数长度为8位,小数长度为23位。取值范围为 3.4E-38~3.4E+38。double有效数字位为15 – 16位,第16位不一定有效,字节数为8,指数长度为11位,小数长度为52位。取值范围为1.7E-308~1.7E+308。浮点数的内部存储为:浮点数的计算结果为:n,s,e,m分别为N,S,E,M对应的实际数值,而N,S,E,M仅仅是一串二进制位。S(sign._c++ float 几位 https://blog.csdn.net/hankern/article/details/107722365

https://bbs.csdn.net/topics/70257464


#include <stdio.h>
#include <math.h>

int main(void){
    

    
    double sum=0;  
    double single=1;
    double n=1;
    sum=0;
    // https://bbs.csdn.net/topics/70257464
    // https://blog.csdn.net/hankern/article/details/107722365
    while(single>=1e-12){  
        
        sum+=single;
        n+=1;    
        single = 1.0/(n*n);    
    }
    // https://www.cnblogs.com/ybqjymy/p/12375824.html
    printf("PI=%f\n",sqrt(sum*6));
    
    double product=1;
     n=1;
    single = ((n+1)*(n+1))/(n*(n+2));
    while(n<10000000){
        product*=single;
        n+=2;
        single = ((n+1)*(n+1))/(n*(n+2));
        
    }
    printf("PI=%f\n",product*2);
    
    
    
    
    return 0;
} 

img

#include <stdio.h>
#include <math.h>

int main()
{
    int n;
    scanf("%d", &n);
    float sum = 0, pi;
    for (int i = 1; i <= n; i++)
        sum += 1 / (i * i);
    pi = pow(sum * 6, 0.5);
    printf("%f", pi);
    return(0);
}