たいていの場合,十進モードより2進モードのほうが高速です。2進モードが十進モードよりどれだけ速いかはCPUに依存します。十進演算は主としてCPUの整数演算を利用するのに対し,2進演算はCPUの浮動小数点演算を用います。
複素数の計算は,実部,虚部を分けて2進モードで行うより,複素数モードを利用したほうが高速です。
(仮称)十進BASICのWindows版はPRINT文の実行結果の表示にWindowsのRichEditコントロールを利用します。
プログラムによっては,実行時間の大部分が画面表示のために取られていることがあります。
PRINT文の実行結果(出力量)が多い場合は,ファイルに出力したほうが効率的です。
例 エラトステネスの篩 (Windows XP上で実行)
画面に表示 | ファイルに出力 |
120 DIM s(100000) 125 LET t0=TIME 130 MAT s=ZER 140 FOR i=2 TO 100000 150 IF s(i)=0 THEN 160 PRINT i 170 FOR j=i^2 TO 100000 STEP i 180 LET s(j)=1 190 NEXT j 200 END IF 210 NEXT i 215 PRINT TIME-t0 220 END |
120 DIM s(100000) 125 LET t0=TIME 130 MAT s=ZER 135 OPEN #1:NAME "eratos.txt" 136 ERASE #1 140 FOR i=2 TO 100000 150 IF s(i)=0 THEN 160 PRINT #1:i 170 FOR j=i^2 TO 100000 STEP i 180 LET s(j)=1 190 NEXT j 200 END IF 210 NEXT i 214 CLOSE #1 215 PRINT TIME-t0 220 END |
34.4秒 | 0.84秒 |
DATA文に書かれたデータを翻訳するとき,WindowsのRichEditコントロールから行データを読み出すのに時間がかかります。大量のデータがある場合には,DATA文に書かないで,ファイルから入力するようにしてください。
Full BASICでの配列引数は,副プログラムと絵定義の場合は参照渡し,関数定義の場合は値渡しになります。
十進BASICの十進モード,十進1000桁モード,有理数モードは配列複写に時間がかかるので,これらのモードでは,関数定義を副プログラムに変更すると高速化できます。
また,文字列配列は,数値のモードに関係なく,配列複写に時間がかかるので,文字列配列を引数にする場合は,副プログラム化すると高速化します。
ただし,関数定義を副プログラムに変える場合は,引数の配列を副プログラム内で変更すると,その変更が元の配列に及ぶことに注意してください。関数定義内で引数配列の値を変更している場合は,副プログラムに書き換えることはできません。
日本語の文字列処理は時間がかかります。バイト文字のみ扱えればよい場合は,各プログラム単位に
OPTION CHARACTER BYTE
を書くと速くなります。
オプション−自動修正(翻訳時)で自動インデントをしない設定にすると翻訳が早く済みます。
BASIC Accelerator は,Full BASICのプログラムをObject Pascalのプログラムに翻訳して実行します。 2進モードおよび複素数モードで実行可能なプログラムの多くはBASIC Acceleratorで高速化が可能です。