移動式のブログ

ガジェット、アニメ、プログラミング、考えたことその他色々・・・特にこれといったテーマはないカオスなブログです。

円周率求めるアルゴリズム その2

ガウスルジャンドルアルゴリズムでπ計算

ガウスルジャンドルアルゴリズムで、円周率を1000桁まで求める

前回、円周率を求めるプログラムをPythonで書いたが、途中までしか求めることが出来なかった。
idoushiki.hatenablog.com


64ビット浮動小数点で計算しているので、小数点以下14桁分まで求めるのが限界だそうだ。

指数部が全て 0(ゼロ、および非正規化数)の場合を除き、通常の数(正規化された数)の精度は、53ビット相当、十進に直すと約16桁である。
倍精度浮動小数点数 - Wikipedia


そのため、もっと多くの桁数を求めるコードを書いてみた
今回は、このサイトを参考にしてコードを組んで、円周率1000桁を求めることが出来た。

qiita.com

特徴として、多数の桁数を表すため、Decimalを利用している。

前回は、そのまま計算したので、パソコンが扱える数値の限界に達していた。

今回は大きな桁数が表示されたのでよかったよかった。



前回書いたコードがこちら

↑前回のコードの実行結果は以下の通り

2.91421356237309492343
3.14057925052216857509
3.14159264621354283875
3.14159265358979400418
3.14159265358979400418
3.14159265358979400418
3.14159265358979400418
3.14159265358979400418
3.14159265358979400418
3.14159265358979400418
3.14159265358979400418
3.14159265358979400418
3.14159265358979400418
3.14159265358979400418
3.14159265358979400418
3.14159265358979400418
3.14159265358979400418
3.14159265358979400418
3.14159265358979400418

そして、今回書いたコードがこれ

今回書いたコードの実行結果は以下の通り

桁: 1000
円周率: 3.14159265358979323846264338327950288
4197169399375105820974944592307816406286208
9986280348253421170679821480865132823066470
9384460955058223172535940812848111745028410
2701938521105559644622948954930381964428810
9756659334461284756482337867831652712019091
4564856692346034861045432664821339360726024
9141273724587006606315588174881520920962829
2540917153643678925903600113305305488204665
2138414695194151160943305727036575959195309
2186117381932611793105118548074462379962749
5673518857527248912279381830119491298336733
6244065664308602139494639522473719070217986
0943702770539217176293176752384674818467669
4051320005681271452635608277857713427577896
0917363717872146844090122495343014654958537
1050792279689258923542019956112129021960864
0344181598136297747713099605187072113499999
9837297804995105973173281609631859502445945
5346908302642522308253344685035261931188171
0100031378387528865875332083814206171776691
4730359825349042875546873115956286388235378
7593751957781857780532171226806613001927876
611195909216420201

参考にしたサイトでは1002桁で設定してあるが、このコードは1000桁で設定しているので、最後の数桁が微妙に異なっている。
しかし、長い桁数を求めることが出来たので良かった。

このパイソンのコードと同じ働きをするプログラムをjavascriptでも書くことが出来れば、俺が制作している円周率ゲーム(javascript製)に利用できそうだ。

getcontext().prec = ketaでは、円周率の小数点以下何桁まで求めるかの桁数を表しているしかし、javascriptでDecimalやgetcontext().prec = keta の部分に相当する働きを実現するにはどうすれば良いのだろうか。また、pythonでいうDecimalと同じ働きを実現するにはどうすれば良いかわからない。
decimal.jsというものもあるようだが、よくわからない、そのままjavascriptで小数点以下の桁数を指定するにしても、100桁までが限界のようでうまくいかない。




Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう

新品価格
¥3,456から
(2017/12/24 16:48時点)