2015年6月14日日曜日

HP50GでZINTによる階乗計算が9999! まで計算できるという話なので、実行してみました

エミュレータでは割合早いそうですが、実機は結構掛かります。
ちなみに、9999!の「桁数」がどうなるのか。こんな事で求まる筈です。
50Gが計算中なので、TI83+でのプログラムを。

PROGRAM:LIMIT
:0→S
:For(I,1,9999)
:S+log(I)→S
:End
:Disp "FACTO",S

1から9999までの足し算ですが、流石に実行時間が掛かり、最終的に得られた値は、35655.45427 という値。これは log(9999!) の値なので、概算では 2.846259e35655 という値になります。桁数は、35656桁。なるほど、これではすぐに結果は出そうもありません。
今もって、50Gは計算中です。ホントに終わるのか心配になってきたヨ ... 。

で、最終的に 01時間28分 で計算が終わりました !

追記
実行時間の表記を変えました。

18 件のコメント:

Sentaro さんのコメント...

akatuki様、こんにちは!

9999!はエミュでも2分30秒くらいかかっていたので実機では試して無かったですけど、内蔵機能で1時間28分はかなりすごいです(^^;
桁数が35656桁というのは単純計算でも最低36KBのメモリが要るわけでZINTすさまじいですね。

で、他の電卓での階乗の計算可能桁数がちょっと気になったのでちょいと調べてみました。

HP Primeでは通常は499までなので253!まで、CASモードで1000!まで可能でした。1001!だと∞という答えが返ってきます(^^;

TI Nspire CX CASだと446!まで全桁計算可能で447!からは普通の指数表示になって、
449!で3.8519305183e997
450!では結果が450!となり計算終了です。
だんだん力尽きていく感じです(^^;

こうしてみると50Gの9999までというのは計算待ち時間が忍耐を要するとはいえ、桁違いにすごいですね。
新世代の電卓が機能的にすべて上回っているのではないことの証明になりました。

やす (Krtyski) さんのコメント...

Akatuki様、sentaro様

すみません、ZINT とは?

ここで聞いた方が早いと言う横着で申し訳ありませんが、これは多桁整数型、みたいなものですか?

Sentaro さんのコメント...

やす様、こんにちは!

まだ勉強中の超初心者身分なので勘違いの可能性もありですが(^^;
ZINTは内部の表現で、おっしゃるとおり、多桁整数型です。

他の形式としては、
BINT  5ニブル整数型
real   実数12桁、指数±499までの浮動小数点型 (通常使われる数値です)
extended real  実数15桁、指数±50000までの倍精度浮動小数点型
comlex  複素数
extended complex  倍精度複素数
とあるみたいです。

UserRPLだとBINTとrealとZINTしか使えないですがSysRPLで全部使えるようになります。

akatuki さんのコメント...

Sentaro様、遅うなりました !

> HP Primeでは通常は499までなので253!まで、CASモードで1000!まで可能でした。1001!だと∞という答えが返ってきます(^^;

最近、Primeエミュも放置新聞でした。
CASでは1000!まで行きますか。∞、というオチは ... 。

> TI Nspire CX CASだと446!まで全桁計算可能で447!からは普通の指数表示になって、
> 449!で3.8519305183e997
> 450!では結果が450!となり計算終了です。
> だんだん力尽きていく感じです(^^;

ウーム。
NspireのCASはどうなっているのか良く知りませんが、前身(?)のVoyage200とかは、Deriveベースだったらしい。
DeriveはDOSの頃の数式処理システムですが、当時はDeriveが電卓に載ったとあってかなり注目を集めておりました。EMSとかでメモリを潤沢に使える頃のプログラムとは言え、それなりの制約があった(そして、それでも十分高機能だったのですが)のかなぁ ?

> こうしてみると50Gの9999までというのは計算待ち時間が忍耐を要するとはいえ、桁違いにすごいですね。
> 新世代の電卓が機能的にすべて上回っているのではないことの証明になりました。

仰る通りです。
ハードウェア、ソフトウェア、双方の発展が見込まれた時期に開発された製品で、ソフトウェア的に機能を多く盛り付けても、すぐに実用になるハードウェアが構成できるだろう、という「希望の時期」の製品だったのか、と。

akatuki さんのコメント...

やす (Krtyski) 様、

Sentaro様が詳細な記述をされましたので、御覧戴き度。Sentaro様、多謝 !

やす (Krtyski) さんのコメント...

階乗記号をどうやって入力するの?

と言う基本的なところで、躓いています。
お恥ずかしい....

Sentaro さんのコメント...

やす様、こんにちは!

キー入力は最初は誰でもそうなっちゃいますよね(^^;

[右SHIFT]+[SYMB]のCATの一番最初か、
もしくは、
[ALPHA]+[右SHIFT]+[2]でいけます。

やす (Krtyski) さんのコメント...

sentaro様

ありがとうございます。

数式通り入力を試していて、なんだか分からないまま、なんとかできるようになりました。

実は、エミュレータで、以下のサイトの内容に従って、円周率計算をやってみているのですが、
http://ll.jus.or.jp/2009/slide/redcarpet/HP50g.pdf

3.1415926536

サイトの内容とは異なり、正しく12桁目が四捨五入された結果になりました。実機とは微妙に異なるのかも知れません。

i^i を計算させたとき、1/(e^(-π/2) と妙な結果 (本来 e^(-π/2) になるはず) ですが、式で表示されたのですが、なにやら触っているうちに、小数でしか結果表示されなくなってしまいました。

マニュアル読め、ってことなのでしょう。

直感的に触るのは時間の無駄に思えてきました(^^;)



やす (Krtyski) さんのコメント...

修正かも...

そういえば、i^i の結果ですが、1/(e^(π/2)) だったかも...
これなら正しいですね。多分私の見間違いだと思います。

CASモードで試そうと思いましたが、うまくCASモードに入れず、今日は断念(^^;)

直感的な操作には限界がかなり高そうです。
やっぱり、マニュアル読め! ですね。

akatuki さんのコメント...

やす (Krtyski) 様、遅うなりました。

もう、Debug4xでお試しですネ ! PCでの操作は少々取っつきにくい所がありますが、ある程度キーボードも使えるので、色々と遊んで見ると面白いです。

HP電卓のCASは、結構クセがある様です。また、CASでなく数値計算する場合にも、複素数の主値の値域が違ってくる所があります。
ちょっと注意が必要です。

やす (Krtyski) さんのコメント...

akatuki様

別件のほうが、出費なしで片付きそうになってきたので、hp 50g のエミュを触り始めています。

実機導入のメリットとしてフーリエ変換数値計算で使えないか?と言うところに興味があります。
一応、数学はまだ少し憶えているので、あとは具体的な数値計算をどうするか...って感じです。

うまくすると、仕事で応用できる可能性を確認したいんですね。
これが使えるとなると、迷わず実機導入です。

ただ、その前に基本的な使い方を分かった上で、自分の力量でプログラミングがどの程度できるのかを確かめたいと思っていて、その思いっきり入り口で躓いていたりします。

先日は、MatLab のオンラインセミナーを受けたところです。PCでMat Labでも良いのですが、そこは使いたい時に、さっと使えるプロ電の方が、遙かに便利ですから....

akatuki さんのコメント...

やす (Krtyski) 様

> 別件のほうが、出費なしで片付きそうになってきたので、hp 50g のエミュを触り始めています。

おおっ、それは良かったです !

> 実機導入のメリットとしてフーリエ変換数値計算で使えないか?と言うところに興味があります。
> 一応、数学はまだ少し憶えているので、あとは具体的な数値計算をどうするか...って感じです。

FFTってヤツでしょうか ?
こういう実務に則した計算をよく知らんので、余り多くを言えませんが、プログラム・ライブラリとか作られているかも知れませんネ。

> うまくすると、仕事で応用できる可能性を確認したいんですね。
> これが使えるとなると、迷わず実機導入です。

色々と調べて、じっくりと検討してみて下さい !
生産終了となっても、今暫くは在庫がある様子ですから、よく検討され度。

> ただ、その前に基本的な使い方を分かった上で、自分の力量でプログラミングがどの程度できるのかを確かめたいと思っていて、その思いっきり入り口で躓いていたりします。

当方も新しい機能を使おうと思ったりすると、そんな事ありまして。でも、それが面白かったりするのですヨ。
必要な機能があって、更に自家製プログラムも構成できたら、「カスタム」キーに登録して簡単に呼び出しが出来ます。HP50Gは、結構実用的にも使えるのです。

> 先日は、MatLab のオンラインセミナーを受けたところです。PCでMat Labでも良いのですが、そこは使いたい時に、さっと使えるプロ電の方が、遙かに便利ですから....

LatMabですか !
当方、その手のものはカラキシで。少しMaximaをいじってみようと試みたものの、なかなか ... 。

Sentaro さんのコメント...

やす様、こんにちは!

>実機導入のメリットとしてフーリエ変換数値計算で使えないか?と言うところに興味があります。

50Gはadvanced user’s reference manualを見ると、FFTとIFFTというコマンドがありますね。
Primeも同様にfftとifftという関数があります。
どちらも使ったことは無いので実用的に使えるものかどうかはよくわからないのですが…(^^;


akatuki様、こんにちは!

>当方、その手のものはカラキシで。少しMaximaをいじってみようと試みたものの、なかなか ... 。

MaximaはLinuxザウルスに入れてましたが多桁計算をちょこっといじったくらいでそのままだったりします。
電卓のCASも今のところは多桁計算以外は宝の持ち腐れ状態かもです(^^;

やす (Krtyski) さんのコメント...

akatuki様
senrato様

フーリエ変換を数値計算する場合は、解析解を求めるのではなくて、離散的フーリエ変換 (DFT) と言われるような、飛び飛びの値を使っった効率よい計算をするようです。

FFT はなんとなく想像できますが、IFFFT はなんでしょうね? 逆フーリエ変換の高速版って感じのような気もします。Inverse の I とすれば...ですが...

そうなら、FFT の逆関数が IFFT って感じですね。



Sentaro さんのコメント...

やす様、こんにちは!

>FFT はなんとなく想像できますが、IFFFT はなんでしょうね? 逆フーリエ変換の高速版って感じのような気もします。Inverse の I とすれば...ですが...

IFFTは逆フーリエ変換なのでInverse の I で正解です(^^)

50Gの英語版user's guideの、Chapter 16 Differential EquationsにFast Fourier Transformの例が載ってますけど、日本語版ガイドブックでは省略されています(^^;

やす (Krtyski) さんのコメント...

sentaro様

ご紹介頂き、ありがとうございます。

この User's guide は、まるで教科書ですね。

日本語版があれば、大学の工学部や理学部の副読本として役立つと思います。立派な教科書として使えるレベルだと思います。

すごいですね。

akatuki さんのコメント...

やす (Krtyski) 様、Sentaro 様

HP50GのUser guideですが、ホント、凄い内容です。
目次だけ見てビビってしまったのです。当方、名前を聞いた程度の知識しか持っていない「Legendre 陪関数」があって「何考えてるのだろうか ...」と絶句してしまった。

大学生とかが使っている、そういう内容なので、真面目に読めばかなり勉強になるのですが、当方にとっては「猫にナントカ」だったりするので、なかなか読み込めないで居るのです、ハイ。

親分、Sentaro 様、結構面白いですヨ。当方はなかなかついて行けないのですが ... 。これを期に、もう少し真面目に読んでみようかなァ。

Sentaro さんのコメント...

やす様、akatuki様、こんにちは!

見比べると英語版のuser's manualが日本語版ガイドブックとして訳されてる感じですが、英語版user's guideは倍以上の内容があるので別物くらい違いますね。

ユーザーズマニュアルよりもユーザーズガイドが詳しいっていうのがなんか変な感じですけど、英語版user's guideは教科書と考えると納得です(^^)

英語版user's guideも日本語版が出てくれているとかなり助かるところなんですけどね(^^;