我正在試圖做一個程序來找到pi的近似值。我想實施布豐的針法。我的程序找到隨機的x座標形式0到1和隨機角度(0到360)。如果[sin(角度)* 1/2針的長度]大於x,則有正面試驗。該程序使循環中的試驗失敗。最後一部分是使用公式(長針* n)/正實驗來計算pi。布豐的針C++
lenght針= 0.9
間隔= 1
n的結果=千萬是PI = 3,12 ...我無法查找程序中的任何錯誤。我在做什麼不正確?
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <math.h>
using namespace std;
int main()
{
double x; // x coordinate of needle's center
double k; // angle between vertical position and needle
double l; // lenght of the needle
double n; // amount of trials
double p = 0; // positive trials
double y; // sin(angle) * l
double pi;
long i; // loop counter
srand(time(NULL));
cout << "number of trials ";
cin >> n;
l = 0.9;
for (i=0; i<n; i++)
{
k = (double)rand()/(RAND_MAX)*360; // random angle
x = (double)rand()/(RAND_MAX*2); // random x (0 do 1)
y = (l/2) * sin (k);
if (x<=y)
{
p++;
}
}
pi = (l*n)/(p);
cout << "n = ";
cout << n << endl;
cout << "p = ";
cout << p << endl;
cout << pi;
return 0;
}
你應該使用,而不是(它的老ANSI C風格,CMATH是現代) –