Python : mathで円周率の計算
円周率の計算です。
コロナが一向に収束しないのもあり、
現在会社が月の半分休業状態で、今日は家で自宅待機なのですが、
子供が宿題している横で、遊んでいるわけもいかないので、
円周率の計算をしてみました。
pythonでの円周率は
mathのモジュールの「math.pi」で出せるのですが、
せっかくなので、普通に計算してみました。
ちなみに、math.piの値は「3.141592653589793」
計算方法は、正多角形(内接、外接)ではさんだ値となり、
多角形の数が大きくなればなるほど、円に近似するという方法ですね。
円の長さ(2πr)は下記の青い八角形(内接円)と赤い八角形(外接円)の間
後は、画数が多ければ多いほど、円に近付くという計算方法です。
後は、一辺の長さは下記になるので、この正八角形の辺の分だけ足せばよいだけです。
内接円の場合は 2 x 半径 x sinθ
外接円の場合は 2 x 半径 x tanθ
まぁほぼ自己満足のプログラムです。
sin、tanを出す際にmathを使っていますからね~
下記のプログラムは正四角形から始まり、4倍ずつしていくプログラムで、
結果は下記のようになります。
csvに書き込むと下14桁が最小見たいで、途中から変わらなくなってしまいます。
最後の562兆角形のものは恐らく、小数点が足りずに
角度が0になってしまうのでしょうね、値が円周率が0になってしまいます。
これだけの計算が1秒かからないぐらいでできるので、素晴らしいですよね。
アルキメデスが見たら驚くでしょうね。
プログラムは下記です。
import math
#円周率
print(math.pi)
j = 4
j_angle = 360
list_angle = []
f_pi = open('pi.csv','w',encoding='utf-8')
f_pi.write('kakusu'+',')
f_pi.write('pi'+'\n')
###########################
for i in range(1,100):
#一辺の角度÷2
angle = float(j_angle / j / 2)
#外接円の辺の長さ
one_sin = math.sin(math.radians(90-angle)) * 0.5
gaisetsuen = one_sin * 2 * j
#内接円の辺の長さ
one_tan = math.tan(math.radians(90-angle)) * 0.5
naisetsuen = one_tan * 2 * j
#内接円と外接円の平均
average_length = (gaisetsuen + naisetsuen) / 2
#リストにデータを追加
list_angle.append(str(j)+','
+str(average_length)+','
)
#csvにデータを追加
f_pi.write(str(j)+',')
f_pi.write(str(average_length)+'\n')
#正多角形の画数を増やす、倍々
j = j * 2
j_angle = 360 + (j-4)*180
#################################
print(list_angle)
f_pi.close()
今までにpythonについて書いた記事はここにリンクを貼ってあります。
興味があればぜひご覧ください。