Notebook
これは日々の作業を通して学んだことや毎日の生活で気づいたことをを記録しておく備忘録である。
HTML ファイル生成日時: 2025/10/08 09:03:58.657 (台灣標準時)
円周率を求めるための新しい公式
インド人の研究者によって、円周率を求めることに使える新しい公式が見つけ
られたそうでござる。
この公式を使って、円周率の近似値を計算するプログラムを書いてみたでござ
る。
#!/usr/pkg/bin/python3.12
#
# Time-stamp: <2024/08/02 13:06:52 (UT+8) daisuke>
#
# importing math module
import math
# a function to calculate approximate value of pi
def new_pi (l, n):
# initialising value of pi
pi = 4.0
# calculating n terms
for i in range (1, n+1):
a = 1.0 / (i + l) - 4.0 / (2.0 * i + 1.0)
b = (2.0 * i + 1.0)**2 / (4.0 * (i + l) ) - i
c = i - 1.0
d = math.factorial (i)
pi += a * math.gamma (b + c) / math.gamma (b) / d
# returning calculated approximate value of pi
return (pi)
# calculation of approximate value of pi
pi = new_pi (10.0, 100)
# printing result
print (f'approximate value of pi')
print (f'50 digits: 3.14159265358979323846264338327950288419716939937510')
print (f'new_pi (10,100): {pi}')
実行結果は以下の通りでござる。
% ./pi_2024.py
approximate value of pi
50 digits: 3.14159265358979323846264338327950288419716939937510
new_pi (10,100): 3.1415926535897927
λ=10 で、 100 項も計算すれば、 15 桁くらいまで合っているようでござる。
上の方法だと、倍精度の範囲内でしか円周率の近似値を求められないでござる。
更に、桁数を増やすにはどうすればよいのか考えてみたでござる。 Python に
標準で含まれる Decimal モジュールを使えばよいかと思ったのでござるが、
ガンマ関数の計算をする部分を自分で書かねばならぬので、面倒そうでござっ
た。調べてみると、 mpmath というパッ
ケージがあることがわかったでござる。このパッケージにはガンマ関数を計算
してくれる関数も用意されているようなので、これを使えば簡便に円周率の近
似値を求められそうでござる。以下のようなコードを準備してみたでござる。
#!/usr/pkg/bin/python3.12
#
# Time-stamp: <2024/08/02 14:50:52 (UT+8) daisuke>
#
# importing mpmath module
import mpmath
# settings for mpmath module
mpmath.mp.dps = 100
mpmath.mp.pretty = True
# a function to calculate approximate value of pi
def new_pi (l, n):
# initialising value of pi
mp_1 = mpmath.mpf (1)
mp_2 = mpmath.mpf (2)
mp_4 = mpmath.mpf (4)
mp_l = mpmath.mpf (l)
mp_pi = mp_4
# calculating n terms
for i in range (1, n+1):
mp_i = mpmath.mpf (i)
a = mp_1 / (mp_i + mp_l) - mp_4 / (mp_2 * mp_i + mp_1)
b = (mp_2 * mp_i + mp_1)**mp_2 / (mp_4 * (mp_i + mp_l) ) - mp_i
c = mp_i - mp_1
d = mpmath.factorial (i)
mp_pi += a * mpmath.gamma (b + c) / mpmath.gamma (b) / d
# returning calculated approximate value of pi
return (mp_pi)
# calculation of approximate value of pi
l = 10
n = 10000000
pi = new_pi (l, n)
# printing result
print (f'approximate value of pi:')
print (f'100 digits:')
print (f'3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679')
print (f'new_pi ({l},{n}):')
print (f'{pi}')
実行結果は、以下の通りでござる。
% ./pi_2024_100.py
approximate value of pi:
100 digits:
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
new_pi (10,10000000):
3.141592653589793238462643383279502884197169399375105820974944592307816406286206269139035079106063948
1000 万項の計算をすると、 78 桁くらいまでいけるようでござる。
- About this article:
- author: daisuke
- file: 20240802_00.html
- category: Computer___Python
- title: 円周率を求めるための新しい公式
- mode: public
- last modified: 2024/08/02 16:13:40 (UT+8)
- html generated: 2025/10/08 09:03:58.657 (Taiwan Standard Time)
Frequently accessed files
- Misc___Taiwan/20240207_00.html
- 866 page views
- title: 台灣から台灣の外に EMS で荷物を発送する方法
- Misc___Taiwan/20240819_00.html
- 759 page views
- title: 住所から台灣の郵便番号を調べる方法
- Computer___TeX/20231107_00.html
- 583 page views
- title: LaTeX での counter の利用方法について
- Computer___NetBSD/20230119_00.html
- 500 page views
- title: NetBSD でバイナリーパッケージを利用する方法
- Misc___Japan/20240610_00.html
- 441 page views
- title: NHK ラジオの「聞き逃し」の変更点 (2024 年 06 月)
- Computer___TeX/20230726_01.html
- 433 page views
- title: Beamer の Metropolis テーマで block の色を変える方法
- Computer___NetBSD/20250301_01.html
- 431 page views
- title: yt-dlp で YouTube の動画をダウンロードするときのこと
- Computer___Network/20240130_00.html
- 395 page views
- title: Google Colaboratory で Python 3.12 を使う方法
- Misc___Taiwan/20240903_01.html
- 383 page views
- title: 台湾の郵便局で EMS を利用して荷物を海外に送る方法
- Computer___Network/20230516_00.html
- 369 page views
- title: OpenVPN 2.6 を使い VPN Gate に接続するときの注意点
- Computer___TeX/20240411_00.html
- 349 page views
- title: LuaTeX を使って PDF ファイルを作成する方法
- Computer___NetBSD/20240805_03.html
- 348 page views
- title: NetBSD 10 のインストール
- Misc___Taiwan/20250728_01.html
- 315 page views
- title: 「我那小小多山的國家」という言葉が流行っている
- Computer___FreeBSD/20220621_0.html
- 312 page views
- title: FreeBSD での X.org の設定の仕方
- Computer___Hardware/20240820_00.html
- 296 page views
- title: Raspberry Pi 5 の演算性能
- Computer___NetBSD/20250409_00.html
- 296 page views
- title: Raspberry Pi 5 に NetBSD-10.1 をインストールする手順
- Computer___Debian/20230102_00.html
- 294 page views
- title: Debian GNU/Linux で KVM を使い仮想機械を動かす手順の記録
- Food___Taiwan/20230615_01.html
- 287 page views
- title: 「郭記牛肉食堂」の豬肉炒飯と紅燒牛肉湯 (2023 年 01 月下旬)
- Computer___NetBSD/20240804_00.html
- 285 page views
- title: NetBSD で NVMM を使って仮想機械を動かす方法
- Computer___NetBSD/20241102_00.html
- 284 page views
- title: ImageMagick の convert コマンドについて
- Computer___NetBSD/20250307_00.html
- 279 page views
- title: uim と mozc による日本語入力の設定について
- Computer___TeX/20230503_00.html
- 274 page views
- title: LaTeX CJK で日本語や中国語を取り扱うための準備について
- Computer___NetBSD/20240810_00.html
- 270 page views
- title: Raspberry Pi 5 に NetBSD-10 をインストールしてみた
- Computer___TeX/20240414_00.html
- 268 page views
- title: LuaTeX での fontspec を使ったフォントの設定の方法
- Computer___NetBSD/20220818_1.html
- 264 page views
- title: Emacs の markdown-mode について
- Computer___WWW/20230522_02.html
- 258 page views
- title: HTML でプログラムのコードを書くときの設定
- Food___Taiwan/20230608_04.html
- 257 page views
- title: 「田園美食屋」の咖哩煎雞腿
- Computer___TeX/20240410_00.html
- 256 page views
- title: pdfTeX を使って PDF ファイルを作る方法
- Computer___TeX/20240414_01.html
- 256 page views
- title: LuaTeX を使って日本語と中国語の漢字が混在した PDF ファイルを作成する方法
- Science___Math/20220420_0.html
- 250 page views
- title: ラプラシアンの三次元極座標表示
HTML file generated by Kinoshita Daisuke.