YuAokiの日記: モンテカルロ法による円周率の計算(C++版)。
日記 by
YuAoki
Cマガのプログラミング研究会のお題(第2回)を解いてみる。
参考文献なし。
#include <iostream>
#include <stdlib.h>
using namespace std;
//モンテカルロ法で、円周率を算出します。
//numberoftimesは乱数ポイントの試行回数で
//数値が多いほど、時間はかかりますが、正確な
//円周率が算出できます。
double calculatePai(int numberoftimes){
double x = 0;
double y = 0;
int count = 0;
for (int i=0;i<numberoftimes;i++){
//乱数を生成して、乱数ポイント(x,y)を作る
x = (double) rand()/RAND_MAX;
y = (double) rand()/RAND_MAX;
if (((x*x) + (y*y)) < 1){
//乱数ポイント(x,y)が、円の域内に入っている場合は
//カウンタフラグを増やす
count++;
}
}
//半径(1)の二乗×円周率=半径(1)の二乗×占有率×4
//だから、円周率=占有率×4
return (double) count * 4 / numberoftimes ;
}
int main(int argc, char *argv[])
{
//試行数70万回で表示
cout << calculatePai(7000000) << endl;
//停止
system("PAUSE");
return 0;
}
結果は、
===================
3.14127
続行するには何かキーを押してください . . .
===================
まぁ、OK。
参考文献なし。
#include <iostream>
#include <stdlib.h>
using namespace std;
//モンテカルロ法で、円周率を算出します。
//numberoftimesは乱数ポイントの試行回数で
//数値が多いほど、時間はかかりますが、正確な
//円周率が算出できます。
double calculatePai(int numberoftimes){
double x = 0;
double y = 0;
int count = 0;
for (int i=0;i<numberoftimes;i++){
//乱数を生成して、乱数ポイント(x,y)を作る
x = (double) rand()/RAND_MAX;
y = (double) rand()/RAND_MAX;
if (((x*x) + (y*y)) < 1){
//乱数ポイント(x,y)が、円の域内に入っている場合は
//カウンタフラグを増やす
count++;
}
}
//半径(1)の二乗×円周率=半径(1)の二乗×占有率×4
//だから、円周率=占有率×4
return (double) count * 4 / numberoftimes ;
}
int main(int argc, char *argv[])
{
//試行数70万回で表示
cout << calculatePai(7000000) << endl;
//停止
system("PAUSE");
return 0;
}
結果は、
===================
3.14127
続行するには何かキーを押してください . . .
===================
まぁ、OK。
モンテカルロ法による円周率の計算(C++版)。 More ログイン