ChatGPTに、任意の桁数の円周率を計算するPythonコードを書いてもらいました。
mpmathという高精度演算ライブラリを使って、非常にシンプルなコードになりました。
コード:
import mpmath
# 計算する桁数を指定
mpmath.mp.dps = 10000000
# 円周率を計算
pi = str(mpmath.pi)
# 結果をテキストファイルに出力
with open('pi.txt', 'w') as f:
f.write(pi)
このコードでは、mpmathのdps属性を使用して計算する桁数を指定しています。 mpmath.mp.dps = 10000000の行で1000万桁の精度を指定していますが、計算には多くの時間がかかる可能性があります。 スクリプトを実行すると、現在のディレクトリにpi.txtというファイルが作成され、円周率が書き込まれます。
結果
処理時間を計測する処理を追加して、33554433桁を指定して実行したところ、以下のように 42.182 秒 となりました。速いなぁ。。。
本当にあっているのか不安になったので、別途、「スーパーパイ」という有名な円周率計算ソフトの結果と比較しました。桁数が33554433桁なのは、スーパーパイに合わせたからです。手元のPCで3355万桁を計算させたところ、「8分46秒」でした。
スーパーパイの計算結果はテキストファイルで保存されるので、Pythonでの結果をdiff コマンドと、念のため検証用のpythonコードも通してみましたが、結果は完全に一致しました。
diff pi.txt super_pi.txt
def compare_pi_files(file1, file2):
with open(file1, 'r') as f1, open(file2, 'r') as f2:
pi1 = f1.read().strip()
pi2 = f2.read().strip()
if pi1 == pi2:
print("円周率は一致しています。")
else:
print("円周率は一致していません。")
mismatch_index = -1
for i, (digit1, digit2) in enumerate(zip(pi1, pi2)):
if digit1 != digit2:
mismatch_index = i
break
if mismatch_index != -1:
print(f"一致しない位置: {mismatch_index+1}")
print(f"{file1}: {pi1[mismatch_index]}")
print(f"{file2}: {pi2[mismatch_index]}")
else:
print("一致しない位置は見つかりませんでした。")
# ファイルパスを指定して実行
compare_pi_files("pi.txt", "super_pi.txt")