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)