このディレクトリの索引

#  
#  モンテカルロ法により円周率を求める
#   

試行限界数(10000000).

モンテカルロ法により円周率を求める(_試行限界数,_円周率) :-
        var(_試行限界数),
        試行限界数(_試行限界数),
        モンテカルロ法により円周率を求める(_試行限界数,_円周率),!.
モンテカルロ法により円周率を求める(_試行限界数,_円周率) :-
        count('_x,_yを乱数から求め、ピタゴラスの定理を使って座標点(_x,_y)が四分の一円の内部であるか判定する'(_試行限界数),
              _四分の一円の内部に落ちた数),
        _円周率 is (_四分の一円の内部に落ちた数 * 4.0) / _試行限界数.

'_x,_yを乱数から求め、ピタゴラスの定理を使って座標点(_x,_y)が四分の一円の内部であるか判定する'(_試行限界数) :-
        between(1,_試行限界数,_),
        '0から1の乱数2つをペアにし、片方をx座標、もう1方をyとする'(_x,_y),
        ピタゴラスの定理を使って座標点が円の内部であるか判定する(_x,_y).

'0から1の乱数2つをペアにし、片方をx座標、もう1方をyとする'(_x,_y) :-
        _x is random(100001) / 100000,
        _y is random(100001) / 100000,!.

ピタゴラスの定理を使って座標点が円の内部であるか判定する(_x,_y) :-
        1.0 >= _x * _x + _y * _y.

count(P,N) :-
        findall(1,P,L),
        length(L,N).