我正在嘗試寫一個類似Monte Carlo的C逼近。我不太熟悉它,並且正在嘗試翻譯我的基於python的技巧,所以我可能只是簡單地忽略某些東西。我一直得到0結果,我不明白爲什麼。我應該如何解決這個問題?另外,在最後兩個printf
呼叫中,我收到錯誤消息,說他們是double *
而不是double
。它編譯反正,這是相關的嗎?在printf
C中的Pi逼近 - 爲什麼我會得到近似值爲0的結果?
#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();
}
警告是相同的錯誤。不要忽視它們。在這種情況下,編譯器告訴你,你傳遞一個變量的地址而不是變量本身。請遵照其建議。否則,你將看不到你的代碼的結果。此外:(1)SO不是代碼審查站點,(2)如果您發佈代碼(當您有具體的技術問題時),請將其正確縮進。 –
對不起。我通常會問Ubuntu和數學。我認爲這是最好的描述。這種類型的問題更適合問什麼? – Tristen
你意識到分工是允許的,對吧?如果寫入'/ y',則程序中每次出現'*(1/y)'會更快,更準確(更短)。 –