のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

C++でモンテカルロ法を書いて、円周率を計算した

Sponsored Links

皆さんこんにちは
お元気ですか。私は元気です。

さて、今日はモンテカルロ法を書いて、円周率を計算してみました。
基本的な戦略は簡単で、円の中にあるかどうかを判定します。判定式ですが(x**2 + y**2 <= 1.0)の時に
円より中にあると計算します。

f:id:tereka:20150215221746p:plain

四角の中に対してランダムに点を打ち、オレンジ色の箇所の数を数えます。最終的に4倍を行い、円周率とします。

Source Code

#include <iostream>
#define N 10000

using namespace std;

int main(void){
        double cnt = 0.0;
        for(int i = 0; i < N; i++){
                double x = (double)rand()/RAND_MAX;
                double y = (double)rand()/RAND_MAX;

                if((x*x + y*y) <= 1.0){
                        cnt += 1.0;
                }
        }
        cout << "円周率:" << cnt / N * 4.0 << endl;
}

Output

円周率3.1496