タイトル | : Re^8: N88-BASICで素数を表示カウントする PRIME88.BAS |
投稿日 | : 2024/03/24(日) 15:59 |
投稿者 | : としき |
参照先 | : http://toshiki.la.coocan.jp/ | 番 号 | : 11172 11170 番 としき さんへのコメント コメント数 2 |
> 自宅に戻ったらアップロードしたいな。アップロードしました。 tp://toshiki.la.coocan.jp/prime88.zip 期間限定。そのうちに削除します。> といいつつ、特にファイル書き込みの部分はろくに動作確認をしていないのだけど。こんな短いコードなのに、全ての条件分岐を網羅するホワイトボックステストは 行っていない。面倒になっちゃって。あぁ、横着。 とはいえ、画面表示とファイル出力の、最低限のチェックはしたので、少なくとも 一部はPC-98のDOS BASICで動作確認済み。 GOTOとGOSUBのジャンプはほとんどラベル化したので、行番号はなくても論理構造は 理解可能なはず。konnoさんのお持ちのTurboBasicなら、例えばcols.defのようなもの を使って全ての行番号を削除しても、もしかしたらコンパイル可能かも。 ラベルの文法が違うからダメ、かな。 あと、もしかしたらほんのちょっとだけ高速化するかもしれない技術を一つ、導入 してみました。 1360 IF INT(I/2)*2 = I THEN *EXIT2 1380 WHILE (J<SQR(I)) AND (INT(I/J)*J<>I) ここ、多くの処理系では割り算よりも掛け算のほうが速いと聞いたことがあるので、 割り算を2回するのではなく掛け算と割り算の組み合わせに変更してみました。 これでどのくらい早くなるかは測定していないからわからない。 処理系によっては、むしろ遅くなったりして。 konnoさんオリジナルのロジックよりは、使う変数も少なくなっている分だけ速く なってるかもしれないけど、こんなもん、最近のコンパイラなら最適化してくれる でしょ、という範囲かもしれない。 あとはまぁ、PC-88などの8ビットマシンならDMAを停めるとか、ナノピコ秒単位で 速度を稼ぐためにインデントを全て削除してマルチステートメント化するとか、 他にもいろいろと思いつく技はいくつかありますけどね。そこまではしていません。
- No.11172 一括表示へ - コメント元:11170 一括表示へ - [ 返信 ] [引用無し] pre