廿TT

譬如水怙牛過窓櫺 頭角四蹄都過了 因甚麼尾巴過不得

オーバーフロー、アンダーフロー

Statistical Computing with R (Chapman & Hall/CRC The R Series)

Statistical Computing with R (Chapman & Hall/CRC The R Series)

前回
Maria L. Rizzo "Statistical Computing with R"
Example 11.2(ふたつの大きい数の比)

\displaystyle \frac{\Gamma((n-1)/2)}{\Gamma(1/2)\Gamma((n-2)/2)}
を計算したい
Rには最初からΓ関数が入ってる
例えばn=400のとき

> n <- 400
> (gamma((n-1)/2) / (sqrt(pi) * gamma((n-2)/2))) #Γ(1/2)=√π
[1] NaN
Warning messages:
1: value out of range in 'gammafn' 
2: value out of range in 'gammafn' 

計算結果がNaNになった
なんかメッセージがでてる
gamma((400-1)/2)とgamma((400-2)/2)がどっちもすごく大きい数なので、用意された桁からあふれちゃったみたいだ
無限÷無限=不定形
みたいなもんか
なので工夫して計算する

f:id:abrahamcow:20140228230414p:plain

> exp(lgamma( (n-1)/2) - lgamma((n-2)/2) ) / sqrt(pi)
[1] 7.953876

できた
一度、lgamma(対数ガンマ関数)で計算してから、expでもとに戻している
ちょっとおもしろい



追記:
ここから先がもうわからん。だめだ。これはもうだめかもしれない。
勉強してると、いままでやってきたことがばーってつながって、これはなんか面白いことができそうだって錯覚する瞬間もたまーにあるのよ
そういうのが月一くらいのペースで起こってくれればもっと人に優しくできるのに、と思うよ

追記(2014年2月28日)

はてなブログに移行したところ、一部はてなTeX 記法が数式を表示してくれなくなってたので、
TeXclipで画像にして貼り直した。

「工夫して計算する」のところ:

\begin{align*}
\frac{\Gamma((n-1)/2)}{\sqrt{\pi}\Gamma((n-2)/2)} &=\exp \left( \log \left( \frac{\Gamma((n-1)/2)}{\Gamma((n-2)/2)} \right)\right) /\sqrt{\pi}\\
&=\exp\left(\log\left(\Gamma((n-1)/2)\right)-\log\left(\Gamma((n-2)/2)\right)\right)/\sqrt{\pi}
\end{align*}