このディレクトリの索引

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

試行限界数(10000000).

モンテカルロ法により円周率を求める(_試行限界数,_円周率) :-
        var(_試行限界数),
        試行限界数(_試行限界数),
        モンテカルロ法により円周率を求める(0,_試行限界数,0,_円周率),!.
モンテカルロ法により円周率を求める(_試行限界数,_円周率) :-
        モンテカルロ法により円周率を求める(0,_試行限界数,0,_円周率).

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

'_x,_yを乱数から求め、ピタゴラスの定理を使って座標点(_x,_y)が四分の一円の内部にあるならば加算する'(S,S2) :-
        '0から1の乱数2つをペアにし、片方をx座標、もう1方をyとする'(_x,_y),
        ピタゴラスの定理を使って座標点が円の内部であるか判定する(_x,_y),
        S2 is S + 1,!.
'_x,_yを乱数から求め、ピタゴラスの定理を使って座標点(_x,_y)が四分の一円の内部にあるならば加算する'(S,S).

'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.