乱数を使って円周率を求めてみよう(モンテカルロ法)
当ページのリンクには広告が含まれています。
スポンサーリンク
ここでは乱数を使って(モンテカルロ法を使って)、円周率を求めてみましょう。
ここではrand関数を使って乱数を生成します。rand関数を使ったことがない方は、まずはこちらをご覧ください。
サンプルプログラム
それではサンプルプログラムをみてみましょう。
/*
* C言語のサンプルプログラム - Webkaru
* - 乱数を使って円周率を求めてみよう(モンテカルロ法) -
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
int i;
int count = 0;
int max = 100000;
double x,y,z,pi;
/* 乱数の種を初期化 */
srand(time(NULL));
/* 0 〜 1 の乱数を生成・出力 */
for(i=0;i<max;i++){
x = (double)rand()/RAND_MAX;
y = (double)rand()/RAND_MAX;
z = x*x + y*y;
if(z<1)
count++;
}
/* 円周率を計算・出力 */
pi = (double)count / max * 4;
printf("%f\n", pi);
return 0;
}
実行結果
いくつかの実行結果です。
3.144000
3.147520
3.14までは正確に計算できているようです。試行回数(変数「max」)を増やしたり、より周期の長い乱数を使うとより精度が高くなるでしょう。