今日の人気記事

  1. 乱数 - 1〜10のランダムな数値を出力する

  2. printf関数の変換指定子

  3. MinGW - gccのコンパイルと実行 - Windows環境

  4. 入力した2つの配列の数値を交換

  5. 乱数 - サイコロをつくってみよう

乱数を使って円周率を求めてみよう(モンテカルロ法)

当ページのリンクには広告が含まれています。

スポンサーリンク

ここでは乱数を使って(モンテカルロ法を使って)、円周率を求めてみましょう。

ここでは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」)を増やしたり、より周期の長い乱数を使うとより精度が高くなるでしょう。

サンプルプログラム の人気記事

  1. サンプルプログラム集

  2. 10進数を2進数に変換する

  3. 乱数 - 1〜10のランダムな数値を出力する

  4. 2進数を10進数に変換する

  5. フィボナッチ数の計算する

  6. 配列に格納した数値を昇順ソートする

  7. 入力した自然数を逆順に並べ替える

  8. 入力した2つの自然数の最小公倍数を求める

  9. 入力した長さの単位をセンチメートル(cm)からインチ(inch)へ換算する

  10. 入力したアルファベットを小文字から大文字に変換する

関連記事(一部広告含む)