« タマサンゴ | トップページ | 階乗の話(まだあるの?) »

2014年11月18日 (火)

階乗の話(またまた)

http://yamada-kuebiko.cocolog-nifty.com/blog/2014/11/post-b154.html
2014年11月17日 (月)「階乗の話(まただ)」
↑この話の続きです。

★nの階乗の見積もり
有名な近似式がありまして
http://ja.wikipedia.org/wiki/%E9%9A%8E%E4%B9%97
スターリングの近似(英: Stirling's approximation)
Stirling ←式
こんな式で近似ができるのだそうです。
深く立ち入りませんで、結果だけ使うことにします。
ウィキでは20!を例示してあります。
Fact20_2

Fact20
これが近似値。有効数字2桁くらいですね。

「n>>0」という表現は、「nが0より『非常に』大きい」という意味です。
数学にも「非常に」などという表現があるのが面白いですね。
n=20くらいでは「非常に」大きくはないのかな。

私の電卓での限界はn=69
VBAでの限界は n=170
十進BASIC1000桁モードでの限界がn=453
ウィンドウズ関数電卓での限界はn=3248

★n=3248で近似をやってみましょうか。きっと「非常に大きい」のではないか。
ところがですね
3248^3248 はいくらウィンドウズ関数電卓でもオーバーフローします。
するってぇと、スターリングの近似式は使えないのか?

e^3248 = 3.8768341443509401860885466349352e+1410
で、これは計算可能。

3248^3248.5 が何とかなればいいのですが。

A = 3248^3248.5
とおいて、両辺の常用対数を取ります。
logA = 3248.5log3248 = 3248.5*3.5116160205691376989000186004599
=11407.484642818843814876710423594
「11407」はAの指数部ですので、取ってしまって。
10^0.484642818843814876710423594 = 3.0524096567803412721467298490614
となりますので結局
A = 3.0524096567803412721467298490614*10^11407
求まりましたね。

e^3248 = 3.8768341443509401860885466349352e+1410

3248! ≒ √(2π)*(3.0524096567803412721467298490614/3.8768341443509401860885466349352)*10^(11407-1410)
=  √(2π)*(0.78734594855653178503481456095838*10^9997)
= 2.506628274631000502415765284811 
* (0.78734594855653178503481456095838*10^9997)
= 1.9735836165679677488621450971275*10^9997

やったぜ。ウィンドウズの電卓での値と比べてみましょう。
3248! = 1.9736342530860425312047080034031e+9997

これでも有効数字4桁くらいですね。
確かにnが大きくなれば近似の精度は上がるのでしょうけれど、そう急速によくなるのでもなさそうですね。
{神様は人間の想像を絶する大きさの数が簡単に扱えますから、うむスターリングの近似式は実に良い近似を与える、といっているかもしれませんが。}

★こんなやり方で10000!を見積もってみましょうか(バカバカしいけど)

A = √(2πn)
B = n^n
C = e^n

としましょう。

n = 10000 ですので

A = √(20000π) =250.6628274631
B = 10000^10000 = (10^4)^10000 = 10^40000
C = e^10000 =8.80681822581729×10^4342

10000! ≒ AB/C = (250.6628274631×10^40000) / 8.80681822581729×10^4342
= (250.6628274631 / 8.80681822581729)×10^(40000-4342)
= 28.4623596213533×10^35658
= 2.84623596213533×10^35659

出ましたね。
10000! ≒ 2.84623596213533×10^35659
で~す。

10000の階乗は、出だしは「2846…」で、数字が全部で35660個並びます。

そんな数だ、とスターリングの近似式が言っています。
確かめようもないんですが・・・。
どなたか、JavaのBigIntegerクラスでも使って計算してくださいな。よろしく。

« タマサンゴ | トップページ | 階乗の話(まだあるの?) »

理科おじさん」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« タマサンゴ | トップページ | 階乗の話(まだあるの?) »

2021年5月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
サイト内検索
ココログ最強検索 by 暴想
無料ブログはココログ