> その場合は、その定数表の一部だけが間違っているとか精度が足りないことが発生
> しうるわけです。でも、これって、三角関数とか対数関係の関数で使うワザだった
> ような気がする。
> 平方根でも使うことがあるのかなぁ。
原因が分かったような気がします。
N88BASIC(86) では、FOR文が倍精度では動かないので単精度でやって NG だったのですが
030 defdbl A-Z と変数を倍精度にし、FOR文の I だけ I! で単精度でやってみました。
340 I=2:GOSUB *PRINT1
342 i=3
350 FOR I!=3 TO N
360 IF INT(I/2)*2 = I THEN *EXIT2
370 J=3
380 WHILE (J<SQR(I)) AND (INT(I/J)*J<>I)
390 J=J+1
400 WEND
410 IF J>SQR(I) THEN GOSUB *PRINT1
420 *EXIT2
422 i=i+1
430 NEXT I!
440 I=I-1
他は変えていませんが、このプログラムでは 169 が表示されず、正常になりました。
# 汚れていたのは SQR(I) だったんです。(By now shika)
変数 I が倍精度だと数値の比較が正常なのに、単精度だと 表示は整数でも内部の計算がズレる模様。
想像ですが、例えば比較計算は倍精度で、表示は単精度に丸められているとか。
> > 88-BASIC(86) Compiler version 6.0
> > 1988/08/24 00:00 61,440 BASICC.COM
> これ、頭のNが欠けているのは転記ミスですよね。
はい、そうです。失礼しました。m(__)m
> ところでkonnoさんのところでは、TurboBasicではなく、N88BASICのコンパイラと
> インタプリタで同じ結果になります?
同じ結果になります。上の実験はインタプリタではしてないですが。
> あと、インタプリタとコンパイラでバージョンは同じですか?
同じだと思います。起動メッセージが同じなので。
日付は少し違いますね。