C中的Pi近似 - 为什么我得到0的近似值的结果?

Tri*_*ten 3 c montecarlo approximate

我正在尝试用C编写一个Quasi- Monte Carlo逼近pi.我还不太熟悉它并试图翻译我的基于python的技能,所以我可能只是忽略了一些东西.结果我一直得0,我无法弄明白为什么.我该怎么解决这个问题?另外,我在最后两次printf调用时收到错误,说他们是类型double *而不是double.无论如何它编译,这是相关的吗?

#include <stdio.h>
/*  
Tristen Wentling
montepithon.c
October 31, 2013

*/  
int main(void)
{   
    float i,j,x;
    float count=0,counter=0;
    printf("Please enter the desired grid division size (n=?)");
    scanf("%f", &x);
    float y=x*x;
    if(x==0){
        printf("goodbye");
    }   
    else if(x!=0){
        for(i=0;i<=x;i++){
            for(j=0;j<=x;j++){
                float check=((i*i)*(1/y))+((j*j)*(1/y));
                /*printf("%f\n", check);*/
                if(check<=1){
                    count+=1;
                }   
                else{
                    counter+=1;
                }   
            }   
        }   
    }   
    else{
        printf("error");
    }   
    float prsum=count/y;
    float ptsum=(1-counter)*(1/y);
    double pirprox=4*prsum;
    double pitprox=4*ptsum;
    printf("%f\n", &pirprox);
    printf("%f\n", &pitprox);
    getchar();
}   
Run Code Online (Sandbox Code Playgroud)

hac*_*cks 6

%fprintfexpect double类型参数中的格式说明符.&pirprox并且&pitprox是类型double *,你不能打印地址%f.错误的格式说明符将调用未定义的行为.
更改您的代码段

 printf("%f\n", &pirprox);

 printf("%f\n", &pitprox);  
Run Code Online (Sandbox Code Playgroud)

 printf("%f\n", pirprox);

 printf("%f\n", pitprox);  
Run Code Online (Sandbox Code Playgroud)

  • 它在修复后完美运行,谢谢你指出我忽略了什么. (2认同)