>[AB]にはOn Error命令が実装されていないので、計算エラーがうまくいかないようです。機能強化に要望します?
これは、明白な「バグ」であるので書いたのです。
以下、ゼロ割りを例にとります。
理由の1
デバッグモードとコンパイルモードで結果が違うということは、デバッグモードの存在意義が無くなるため。
理由の2
IEEE754の基準に違反しているため。
http://www.ma.is.saga-u.ac.jp/minamoto/doc/kyudai.pdf
9ページ。
まあ、ABはIEEE754準拠とはどこにも書いてないのですが、
準拠していないともどこにも書いてありません。
(この点、十進BASICとは明確に異なる。)
なお、IEEE754では以下の通り。
※マニュアル未記載ですが、ABの実数の内部形式はIEEE754です。
※※IntesCPUはIEEE754にしたがっているため。
ゼロ割り:±Inf
無効演算(√-1,log(-1)など):NaN(非数値)
※InfやNaNは、特殊な数値であり、以降の計算でInfやNaNを含む演算はInfやNaNとなる。
ですから、
セロ割りが生じた場合、
ゼロ割りエラーで停止(N88Basicの動作) または
±Infとして計算続行 (当然ながら、Infを含んだ演算はInfやNaNを返すものとする。)
のいずれかなら正しい結果です。
※Print x/0 などについても、Inf として出力されることに注意。
でも、現状は、
・デバッグモードの永久ープ:論外。
・コンパイルモ-ドで答=0:論外。数学として間違っている。
としか言いようがないです。
ON ERROR 文は、こういうチョンボからみればどうでもいいツマラナイ状況です。
※※IEEE754準拠を徹底的につきつめると、
・IntelCPUは超越関数に対し1.5bit以内の誤差の計算結果を保証する
となるけど、ABはここまでの保証ナシ、ですよね?
(IntelCPUは80bitで計算しているが1.5bit以内の誤差が確保できる程度。
よって、64bitで計算しているABは1.5bit以上の計算誤差が発生する。)