タイトル | : Re^12: N88-BASICで素数を表示カウントする PRIME88.BAS |
投稿日 | : 2024/04/04(木) 01:01 |
投稿者 | : konno | 番 号 | : 11189 11187 番 としき さんへのコメント コメント数 1 |
> その場合は、その定数表の一部だけが間違っているとか精度が足りないことが発生> しうるわけです。でも、これって、三角関数とか対数関係の関数で使うワザだった> ような気がする。> 平方根でも使うことがあるのかなぁ。原因が分かったような気がします。 N88BASIC(86) では、FOR文が倍精度では動かないので単精度でやって NG だったのですが 1030 defdbl A-Z と変数を倍精度にし、FOR文の I だけ I! で単精度でやってみました。 1340 I=2:GOSUB *PRINT1 1342 i=3 1350 FOR I!=3 TO N 1360 IF INT(I/2)*2 = I THEN *EXIT2 1370 J=3 1380 WHILE (J<SQR(I)) AND (INT(I/J)*J<>I) 1390 J=J+1 1400 WEND 1410 IF J>SQR(I) THEN GOSUB *PRINT1 1420 *EXIT2 1422 i=i+1 1430 NEXT I! 1440 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のコンパイラと> インタプリタで同じ結果になります?同じ結果になります。上の実験はインタプリタではしてないですが。> あと、インタプリタとコンパイラでバージョンは同じですか?同じだと思います。起動メッセージが同じなので。 日付は少し違いますね。
- No.11189 一括表示へ - コメント元:11187 一括表示へ - [ 返信 ] [引用無し] pre