円周率を計算する

ふと思い立ってモンテカルロ法を利用した円周率を計算するプログラムをPythonで書いてみました.

実行環境はGoogle Colabです.プログラミングの教本でよく紹介されている1辺が1の正方形に点をランダムにプロットし,プロットした点が半径1の4分円内に入るかどうかを利用した方法で計算しました.実行時間を計測しています.

import random
import time

start = time.perf_counter()

n = 0
# 試行回数の指定
total = 1000
sum = 0

def circle(x, y):
  if x * x + y * y <= 1:
    return 1
  else:
    return 0

while n < total:
  x = random.random()
  y = random.random()
  sum += circle(x, y)
  n += 1

pi = sum / total * 4
print(f"円周率: {pi}")

end = time.perf_counter()
print(f"実行時間: {end - start}")

もっと鮮やかな方法もあるのかもしれませんが,泥臭く計算させています.

試行回数10回から10億回までの実行結果が以下になります.

試行回数計算結果実行時間 [sec]
103.60.000309936
1003.20.000280948
1,0003.1040.001945798
10,0003.14240.005468485
100,0003.137240.054011143
1,000,0003.1397240.535772979
10,000,0003.14165485.213728351
100,000,0003.1413885651.567647936
1,000,000,0003.141565148523.005331118

より厳密には,乱数の発生の一様性とか浮動小数点とかに気をつけたほうが良いのかもしれませんが,思いつきの暇つぶしなのでご勘弁ください.

実行時間は1万回あたりから線形に増えていきます.これ以上は時間がかかりすぎるな,と思いましたのでやめました.Google Colabを使えば,スペックが不足するパソコンでも簡単にプログラミングできて良いですね.

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA