FOR-NEXT 構文の誤動作について
第8.89版までにはある種の FOR-NEXT 構文で誤動作が起こることが
わかり修正しました。修正版は8.8Aです。
詳しくは次の通りです。
for - next 構文でループ変数の
(1) 初期値が 2^32+2^16 以上で増分が負の場合、あるいは
(2) 初期値が -2^32-2^16 以下で増分が正の場合
に増減が正しく行われなかった。
もっとも簡単な例をあげる。
(1)
10 S=2^32+2^16
20 for I=S to S-1 step -1
30 print I
40 next
run
4295032832
65535 正しくは 4295032831
OK
(2)
10 S=-2^32-2^16
20 for I=S to S+1
30 print I
40 next
run
-4295032832
-65535 正しくは -4295032831
OK
・UBASIC と共に配布している sample programs では問題なし。
・自作プログラムの点検法:ほとんどの場合次のどれかに該当して
いてプログラムの内容を考察しなくても安全であることがわかると
思われる。これ以外の場合は上記(1),(2)に該当しないことをプロ
グラムの内容に立ち入って調べなければいけない。
(a) I%, J% などの %付き変数(短変数)がループ変数ならば安全
(b) 0 以上の数から始まって step がない場合は安全
(c) 配列の index になっている場合は安全
問題ありと分かった場合は、残念ながら 8.8A 版で計算し直す必要
がある。
(97/7/13)