0x3A の罠は、まだ続く
実数の有効桁関連の修正をして N88 DISK BASIC と同じ結果になるようにしたのは、思ったよりは難しくなかった。
というのも、はじめ難儀していた丸め処理に関して 3.x 系の今となっては小数点以下についても Float#round が使えるとわかったので。
はじめはレシピブックを見て桁数指定で処理するメソッドを別に用意したのだけれど、どうもこれの動きがおかしなことになり、いろいろ調べているうちにいつからかはわからないけれど、現状では小数点以下、以上の任意の桁を指定して round 処理ができるらしい。
結果、プログラムも楽になったし、きちんと動作するようにもできた。
この過程で、できればファイル比較ができたらよいなと VS Code の拡張機能を探した。それらしいものを見つけたので試すと十分機能する感じ。
はじめに 88 側でアスキーセーブもしておいて、それと生成したものとを比較してみる。当初多く見つかったのが実数の桁数と丸め処理関連。ここが完了して残っていたのが条件分岐の ELSE の前についた : 。
アスキーセーブしたものにはついておらず、バイナリセーブされたものをみると ELSE を示す 16 進数の前に 3A つまり : がはいっている。どうやらこのまま実行しても問題はないようで動作はしていたけれど、やはり面白くないので対応することに。
おそらくは先の REM 文同様で明確に区別するための方式なのだろうと思うのだけれど、詳細は確かめようもない。
修正してもなかなかうまくいかず不思議に思っていたが、時間をあけてよくよく見れば、コードを挿入すべき場所が間違っているのだった。そこをきちんと対処したら意外とあっさりとしたコードでとりあえず動作するようにはなった。
ただ、ほかのバイナリファイルを試すとエラーになったりするので、まだ未知のなにかがあるのかもしれない。問題ないファイルもある。気長に順次対応ということで。
最悪、アスキーセーブしなおすという方法は残されているので。(というか、比較のためにも一度すべてやっておくべきか)
#タイトルを少し修正(20220607)
| 固定リンク
コメント