_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ _/ _/ BigInt.hsp _/ _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ - 概要 HSP3.0 で巨大整数の鈍足演算を可能にするモジュールです。 あえてDLLを使わずにHSPが本来持っている機能だけで実装しているため HSPを使って巨大整数をつかったプログラムを作成してみたいという奇特な人も DLLを同梱させることなく公開することができます。 - テスト環境 OS : WindowsXP SP2 HSP : HSP Ver 3.0 RAM : 512MB CPU : Pentium4 2.6 (HT) HSP のバージョンは特に気をつけてください。 HSP 2.x で動かないのはもちろんですが、高速化のため少し怪しげな方法を使用しているため HSP 3.0 以降であっても動かないこともあるかもしれません。 - インストール方法 - このファイルと同じフォルダにある、*.hsp なファイル達を C:\Program Files\hsp30\common に移動します。 これで BigInt モジュールが使えるようになります。 - このファイルと同じフォルダにある、*.hs なファイルたちを C:\Program Files\hsp30\hsphelp に移動します。 これで HSP Help Browser で BigInt モジュールのヘルプが見れるようになります。 - モジュールの使い方など sample/begin.hsp をご覧ください。 これで大体は使い方が掴めると思います。 気が向いたら他のサンプルや HSP Help Browser に先ほど追加した BigInt のページを みてみましょう。 - 設定 これらの定数をBigInt.hspをインクルードする前に定義しとくことでちょっとした設定ができます。 ただ、使い方しだいではバグの発生場所の特定が困難になったり、互換性を損ねたりといった デメリットもありますので使い方には注意しましょう。 - BIGINT_NUM_DIGIT 使用する桁数を設定できます。実際に使用するときは #define BIGINT_NUM_DIGIT@ [使用したい桁数] と、インクルードする前に記述してください。 - _BIGINT_NO_ALERT BigInt.hsp独自のエラー表示を無効にします。 これにより若干のパフォーマンス向上が期待できますが、デバッグ効率が下がることを考えると それほど価値はないと思われます。(多分速度差は実感できません) 使用するときは #define _BIGINT_NOALERT と、インクルードする前に記述してください。 後述する _BIGINT_AUTO_ALLOCATION, _BIGINT_NO_DEBUG_HSP も同様の方法で有効になります。 - _BIGINT_AUTO_ALLOCATION 関数、命令に放り込まれた引数がBigIntCreateで初期化されていなくても 関数、命令側で勝手に初期化するようにします。 例えば以下のようにするとデフォルトでは 'a' が未宣言なので警告が出ますが、 _BIGINT_AUTO_ALLOCATION を有効にすることで変数が自動確保され警告が出なくなります。 BigIntCreate b, "12345678" BigIntCreate c, "98765432" BigIntAdd a, b, c __D a ※: この定数は _BIGINT_NO_ALERTとあわせて使わないと有効になりません。 - _BIGINT_NO_DEBUG_HSP debug.hspを使用しなくなります。副作用として __D bi は printlnDebug の使用を辞め mes BigIntToString( bi ) に変更されます。 また、 _D, BigIntDebug といった内部で定義されている関数もなくなります。 これにより "_Dっていう名前の変数がつかえんぞボケ" という不具合も回避できるでしょう。 - FAQ まぁ質問なんてもらったことありませんが、ありそうな問に前もって答えときます。 Q.計算結果がおかしいです。ちなみにソースはこんな感じです。 BigIntCreate bi1 BigIntCreate bi2 mes bi1 + bi2 A.BigInt変数は BigInt* な命令でしか使用できません。 Q.BigInt型変数として初期化したのに 「BigIntとして不正な変数です」とか言われます。 A.BIGINT_NUM_ARRAYの値を増やしてください。エラーは出なくなると思います。 Q.HSPなのに命令の名前が長かったり手続きが多かったりで全然手軽さがない。こんなのHSPじゃない。 sample/beval.hsp をご覧ください Q.インクルードしただけで実行ファイルのサイズがしゃれにならないほど増える。 A.我慢してください。 Q.なんでHSPだけで実装したの? A.確かにこういうのは C++ 辺りでDLL作ればスマートに実装できるでしょう。速度も速くなるでしょうし。 でもそうすると適当にライセンスのゆるそうなソースコードを拾ってきてDLLとそのラッパーを 作ってしまえばできあがりになってしまいます。それはちょっとつまらないかなと思いまして。 といっても sprocket 氏や 妖精現実の管理人に感化されて作ったというのが大きいですが。 Q.HSPでやる利点がわからない。 A.利点はたぶんないでしょう。個人的には巨大整数演算をやりたいという方にはJavaをお勧めします。 標準でBigIntの計算用のライブラリがくっついてますし、GCを採用してるので割とスマートにコーディングできますから。 - 著作権 著作権は放棄していて、改造、再配布などご自由にできます。 ただ、乱数の生成にメルセンヌツイスターを使用しているため 乱数を使用する場合はそちらのライセンスに従ってください。 ============================================================================================= = gonbei = gonbei0671@hotmail.com = http://hp.vector.co.jp/authors/VA038334/ =============================================================================================