-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathex18.py
More file actions
37 lines (28 loc) · 1.88 KB
/
Copy pathex18.py
File metadata and controls
37 lines (28 loc) · 1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 練習18 モンテカルロ・シミュレーション (ex18.py)
# モンテカルロ・シミュレーションは、コンピュータ上で仮想的に実験をしてみて、
# そこから結果を求める問題の解き方です。ここでは円周率を求めてみましょう。
# 一辺の長さが1の正方形に半径1の四分の1円が入っているとします。
# この中に、次々とダーツを投げて円の中に入った数を勘定します。
# 投げるダーツの内で円の中に入るダーツの個数の割合は、正方形の面積と四分の一円の面積の割合と同じです。
# つまり、
# 円の中に入ったダーツの数(nc)/投げたダーツの総数(n) = 四分の1円の面積/正方形の面積
# です。沢山、ダーツを投げれば投げるほどこの値は一定になります。これを使って円周率を求めることができます。
# π = 4 * nc / n
# となるからです。 ダーツを投げるにはジャンケンの時に使った乱数を使います。(つまり、import randomが必要です。)
# random.random() --- [0.0,1.0]の範囲の浮動小数点数を生成
# 投げたダーツが正方形の中に落ちる位置(x,y)をそれぞれ乱数で与えます。そして、x2 + y2 が1より小さければ、円の中に落ちたということになるので、ncを1増やします。ダーツを投げる回数を入力して、円周率を求めるプログラムを作りなさい。
import random
darts_count_inital = int( input("実行回数> ") )
nc = 0
darts_count = darts_count_inital
while( darts_count > 0 ):
x = random.random()
y = random.random()
if ( x**2 + y**2 < 1) :
nc = nc + 1
darts_count = darts_count - 1
PI = 4 * nc / darts_count_inital
print("PI = {}".format( PI) )
# 実行結果
# 実行回数> 100000000
# PI = 3.14169316