ライプニッツの公式で簡単に円周率計算をしてみた。
http://hamusoku.com/archives/6942125.htmlを見て円周率に興味が湧いたのでちょっと試して見ることにした。
とりあえず、円周率の計算方式で一番単純に見えたライプニッツの公式(wikipediaに飛びます)をRubyで単純に実装してみた(本当だったらもっと丁寧に計算しないとまずいけど、趣味の範疇なんで適当に実装)。
公式自体非常に簡単で実装するのに10分もかからなかった。
#-*- encoding:utf-8 -*- if(ARGV[0] == nil) i= 10000000000 else i=ARGV[0].to_i end sum=1.0 i.times{|j| if((j-1)%2==0) d=1.0/(2.0*(j+1.0)+1.0) sum= sum + d else d=-1.0/(2.0*(j+1.0)+1) sum=sum+d end } puts (sum*4).to_s
引数に何も与えず実行したところ以下の結果が得られた。
3.14159 26536 88346
でこいつをwikipediaの円周率に乗っているものと比較すると
3.14159 26535 89793 23846
かなりいい所まで計算が出来ていることが解る。
浮動小数点演算を行なっている事情や、分数の演算を行なっていないためごさが出るのは仕方ない。
本当はその辺りでどのくらい誤差が発生しているのか考えないとマズイ気もするけど面倒くさいのでとりあえず今回はここまで。