階乗の話(まただ)
★1000桁モード
前回までの話では
VBAで
170! = 7.2574E+306
ウィンドウズの電卓で
3248! = 1.9736342530860425312047080034031e+9997
これが限界。
こうなってくると、10の9999乗は無理としても、(仮称)10進BASICの「1000桁モード」が気になりますね。
--------------------
!Factorial
LET MAX = 452
LET fac = 1
FOR i=1 TO MAX
LET fac = fac * i
!PRINT fac
NEXT i
PRINT fac
END
--------------------
↓このプログラムを1000桁モードで走らせた結果をお目にかけます。
MAX=452 が限界で、453にするとオーバーフローです。
プログラムで10桁ごとにスペースを入れる、というようなことも書けますが、今回は本質的な階乗の部分だけを書いて、スペースを入れる作業は原始的に「手動」です。
3533506829 こう始まって
000000 で終わっています。
数字が1006個並んでいるということですね。
3.533506829×(10^1005)
ということです。
こんなものを見たことのある人は少ないと思いますので、もしチャンスがあったら452!を全部見たぞ!と自慢してください。
ちなみに、ウィンドウズの関数電卓で確認すると
452! = 3.5335068298247639287273846425971e+1005
ここまでセーフ。
で
453! = 1.6006785939106180597135052430965e+1008
こうなりまして、453! は1000桁モードではオーバーフローになりました。
もういっちょ、ちなみに
二進およそ16桁 というモードだと
170! = 7.25741561530799 E306
これが限界になります。
{これVBAの限界と同じですね。理由は簡単ですが、いまここで解説することでもないから、やめときます。CPUの能力です。}
「理科おじさん」カテゴリの記事
- 化学の日(2022.10.26)
- 秒速→時速(2022.09.01)
- 風速75メートル(2022.08.31)
- 「ウクライナで生まれた科学者たち」(2022.05.31)
- 反射光(2022.05.09)
この記事へのコメントは終了しました。
コメント