いぬおさんのおもしろ数学実験室

おいしい紅茶でも飲みながら数学、物理、工学、プログラミング、そして読書を楽しみましょう

ライプニッツの公式で円周率を計算できるか?(2)

 ライプニッツの公式で円周率を求める話を書きました。
www.omoshiro-suugaku.com

 中学生の頃この話を聞いて、高校生になってから手に入れた電卓で円周率を求めようと頑張りました。ポケットコンピュータというのも現れ始め、これは当時で3万円くらい。何を使ってもやることは同じで、

1-1/3+1/5-1/7+…………

と、適当なところまで計算し、4倍するのです。しかし、やりながらずっと違和感がありました。こんな方法でいいのかな、と。電卓ではせいぜい小数第10位かそこらまでしか扱えません。それより先の桁の値はどうなるんだろう、と思ったのです。実際、こんなやり方では小さい桁は捨てられてしまい、正しい値は得られません。ではどうしたらよいのでしょうか。

 小数第100位まで計算したいのなら、1=1.000……00、1/3=0.33333……3、1/5=0.200……00、1/7=0.142857142……1428、というようにちゃんと小数第100位まで各桁を表現するのです(実際にはあと何桁か先まで)。電卓では大変ですが、パソコンならプログラムを書けばこういった数同士の和、差、積、商が計算できます。大抵のプログラミング言語は普通には10桁くらいしか扱えません。するとこのままではこういう数は相手にできないことになります。そこで、小数第100位まで続く数を表現するには100個の配列を用意します。x[0], x[1], x[2], ……, x[99] のように。プログラムを書いたことのない人は、これらは要するに100個の変数だと思えばよいです。各変数が小数第1位、第2位、…………を表します。

0. x[0] x[1] x[2] …… x[99]

0. y[0] y[1] y[2] …… y[99]

という小数第100位まで続く2つの数の和は、末位から順に足し算して繰り上がりがあれば次の桁で考慮して、……と人間がやるようにするだけです。差も同様。積も人間がやるように計算すればOK。商はやや難しいですがこれもできます。

 さっき書いたように、ライプニッツの公式を使いたければ、1を小数第100位までちゃんと表し、1/3は1÷3を1.00000……0÷3.00……0と思って計算して1.000……0から引きます。1/5=0.200……0を加え、1/7=1.4285714……1428もちゃんと小数第100位まで計算してから引きます。…………と、これを必要な項まで繰り返すのです。

 微積分を勉強するとライプニッツの公式も証明できるようになります。素晴らしい!! しかし前回書いたようにこの級数は収束が遅く、実際に円周率を求めるのには使えません。でも今回書いたように、円周率の計算にはもうひとつハードルがあるのです。なぜかこちらは本でも触れられることが少ないです。4月から時間ができそうなので、いずれ実験してみます。