AIが描いた 円周率を計算する少女たちの図(使用ツール:イラストお絵描きばりぐっどくん)
この記事は、
・ 発表時のスライド資料はこちら→ 【スライド資料】
先月(
まず、次の式をご覧ください。
【Twitterで拡散された式】
(拡散の過程での誤植部分は修正しています。)
この式はTwitterで「10進数での n 桁目を直接(それまでの桁を計算せずに)計算できる式」という触れ込みで拡散されました。
(ここからは、この式のことを単に「例の式」と書きます。)
例の式の元ネタとなった論文を確認したところ、どうやらそれは事実ではないことに気が付きました。
【元ネタとなった論文: Simon Plouffe,A formula for the n-th decimal digit or binary of π and powers of π,2022 】
実際には例の式は「10進数で 2n 桁の精度で円周率を近似する式」でした。『直接(それまでの桁を計算せずに)』計算することはできませんが、欲しい精度の円周率の近似値がラクに得られるので、任意の桁の数字を『効率よく』得られる式となります。
もう少し詳しく説明しましょう。
この式の中にある**
【偶数番目の関・ベルヌーイ数の表】
したがって、例の式の両辺を
【例の式の両辺を
・ 右辺は有理数になっているので計算が簡単!
このとき、近似の精度は
その理由は今から説明します。
例の式を作るのに最重要な道具は、ズバリ、「リーマンゼータ関数」です!
リーマンゼータ関数というのは、次のような式で定義される関数です。数論をはじめ数学や物理学など様々な分野で用いられている関数です。「見たことある!」という人も多いのではないでしょうか。
リーマンゼータ関数は 𝑠 が大きくなるとどんどん
(注) この表で
また、
さて、上の表(例
そこで、
ただし、右辺の積記号はすべての素数の積を表す。
次に、オイラー積表示を第
これを使って具体的に
右辺の値の下に、実際の値と何桁まで一致しているか表示してあります。
おおよそ、
オイラー積の第
考えてみると、
つぎに、上の表(例
さっきより精度があがりました。ちょっと見にくいかもしれませんので、表にしてみましょう。
このとき、
と近似できることからわかります。
ちなみに、
実際に調べてみましょう。
ですから、
となり、
例の式が
ところで、例の式の中にある「関・ベルヌーイ数」についてまだ説明していませんでした。
というわけで、ここからは関・ベルヌーイ数について説明していきます。
関・ベルヌーイ数というのは、べき乗和の公式と深い関係のある有理数の数列です。(余談ですが、「数列」なのに「~数」と呼ぶのはなぜでしょうね?)
具体的には、次のような関係になります。
(注) 関・ベルヌーイ数については
さきほど、リーマンゼータ関数の引数が正の偶数のときは、「有理数
具体的には、次の様に表すことができます。
任意の正の偶数
この式の証明は簡単ではありませんが、例えば、次のサイトなどを参考にしてください。
これを使って先ほどの式を書き換えることで例の式が得られます!
例の式の仕組みがわかったことで、ここからは応用を考えます。
こんなことありませんか?「急に円周率を計算してみたくなったなー。精度はそんなになくても、簡単に計算できる方法ないかな?」
実は、例の式はもう少し簡単にできます!
1/(2n) 乗を 1/2 乗(つまり平方根)にして、階乗や2のべき乗を使わない形にできます!
つまり、少しくらいの桁なら、がんばれば手計算できるくらいの簡単な形にすることができます!
(「手計算できる」とはいえ、ベルヌーイ数はあらかじめ知っておく必要はあります💦)
例の式の
両辺の平方根をとって
平方根は筆算で開く方法が知られていますから、少しくらいの桁ならがんばれば手計算できますね!
・
高校数学の美しい物語:開平法のやり方と原理
・ 手計算の例
ちょうど
「手計算なんかやってられるか!」という人のために、Wolfram Alpha で計算するためのリンクもおいておきますね。
[ReplaceAll[((-BernoulliB[2n] (2n+2)(2n+1)(2^{2n+2}-4)(3^{2n+2}-9)(5^{2n+2}-25)(7^{2n+2}-49))/(4BernoulliB[2n+2] (2^{2n+2}-1)(3^{2n+2}-1)(5^{2n+2}-1)(7^{2n+2}-1)))^(1/2), {n -> 50}]]( https://ja.wolframalpha.com/input?i=ReplaceAll%5B%28%28-BernoulliB%5B2n%5D+%282n%2B2%29%282n%2B1%29%282%5E%7B2n%2B2%7D-4%29%283%5E%7B2n%2B2%7D-9%29%285%5E%7B2n%2B2%7D-25%29%287%5E%7B2n%2B2%7D-49%29%29%2F%284BernoulliB%5B2n%2B2%5D+%282%5E%7B2n%2B2%7D-1%29%283%5E%7B2n%2B2%7D-1%29%285%5E%7B2n%2B2%7D-1%29%287%5E%7B2n%2B2%7D-1%29%29%29%5E%281%2F2%29%2C+%7Bn+-%3E+50%7D%5D )
上記の改良版の式は、元ネタとなった論文にはない式です。
……が、全くのオリジナルというわけではありません(告白)。
実は、論文にはこんな式がでていました。
【論文にあった式】
(注) 記事の都合上符号を修正しています。
改良版の式とよく似ていますが、リーマンゼータ関数の部分を 省略している点が異なります。
このままでは精度があまりよくないので、リーマンゼータ関数の近似式を付け加えて改良版の式をつくったのでした。
というわけで、例の式の私の見つけた遊び方を紹介してみました。
拡散のされ方でちょっとケチがついてしまいましたが、「10進数で n 桁くらいの精度で円周率が計算したいな~」というニッチな願いが叶えられるステキな式だと思います。
ほかにもいろいろな遊び方ができると思いますので皆さんも遊んでみてください!
【例の式】
【改良版】
【関・ベルヌーイ数】