要約
$\log\pi=1.144729\ldots$は特殊関数の主値でよく現れる重要定数である。
筆者は色んな定数の本を読んでいる。うちに若原龍彦さんという方の一冊がある。この著者の本には様々な定数が数式で書いているものの、あまりの美談に溜め息しかでない。折に、この著者はこの定数$\log\pi$を$\lambda$と書いて美談を価値あるものにしている。そう、定数λ(ラムダ)の登場である。
“定数λ”
ごく簡単に言えば著者から強くインスパイアを受けた、ということであって、なら伝道もしてみたくなったというそれだけのことで、しかしこの呼び名はカッコよくないか?と、一数学者として感嘆を覚えているのである。
私個人が感慨を覚えるという程度のことなら、そこまで科学的知見についてつべこべと述べている意味など皆無だが、それにしても数学的見解についてこの呼び方と値$\lambda=1.144729\ldots$は鮮やかと思えないだろうか?いや、あってもいいはずだ。著者の学問は確実に筆者の知見に対してこれを意味あるものにしている。
数式と数値計算
$\lambda=\log\pi$とし、定義式を以下
$$\lambda=\log2+\displaystyle\sum_{n=1}^\infty\frac{\zeta(2n)}{2^{2n-1}2n}$$
と置く。
ここで$\zeta(s)$はリーマン・ゼータ関数である。
リーマン・ゼータ関数は正の偶数項(2,4,6,…)のみベルヌーイ数によって解を導出できることが知られている。これは偶数ゼータと呼ばれる。
この数式を変形すれば数値計算でも解を得られる。
上記の数式を変形したものをRubyプログラムで示す。
require 'bigdecimal/math'
def LOG_PI(prec)
n = BigDecimal.double_fig + prec
one = BigDecimal(1)
k = one
x = (one - BigMath.PI(n).div(BigDecimal(2), n))
d = x
r = x
y = BigDecimal(0)
while d.nonzero? && ((m = n - (y.exponent - d.exponent).abs) > 0)
m = BigDecimal.double_fig if m < BigDecimal.double_fig
d = r.div(k, m)
y = y + d
k = k + one
r = r.mult(x, n)
end
BigMath.log(2, prec).sub(y, prec)
end
実行結果を以下に。
LOG_PI(50)
#=> 0.11447298858494001741434273513530587116472948129153e1