タイトル | : Re: PRIME88.BAS で 「169=素数?」問題解決か |
投稿日 | : 2024/03/27(水) 22:56 |
投稿者 | : konno | 番 号 | : 11177 11175 番 konno さんへのコメント |
不具合の原因がわかりました。 SQR() 関数の結果判定に問題が有ったようです。 PRIME98.BAS 1320 *START 1330 TM$=TIME$ 1340 I=2:GOSUB *PRINT1 1350 FOR I=3 TO N ' 1360 i2=i/2:i3=int(i/2):IF i2=i3 THEN *EXIT2 ' 合成数 1370 j2=int(SQR(I)) ' 1380 FOR J=3 TO j2 STEP 2 ' 偶数をスキップ 1390 I2=I/J:I3=INT(I/J):IF I2=I3 THEN *EXIT2 ' 合成数 1400 NEXT J 1410 IF J>SQR(I)+.0001 THEN GOSUB *PRINT1 '★ 1420 *EXIT2 1430 NEXT I 1440 I=I-1 このように、SQR() に +0.0001 を足したら問題が解消されました。 計算精度の問題か、最小桁が切り捨てられているのでしょうか。 いくつ足せばいいのか桁を変えて試してみました。 1410 IF J>SQR(I)+.000001 THEN GOSUB *PRINT1 ng Number.10000 0: 0:29 Prime Number = 1233 169 5041 6241 9409 ng 1410 IF J>SQR(I)+.00001 THEN GOSUB *PRINT1 ng Number.10000 0: 0:30 Prime Number = 1232 5041 6241 9409 ng 1410 IF J>SQR(I)+.0001 THEN GOSUB *PRINT1 ok Number.100000 0: 2:29 Prime Number = 9592 どうも N88BASIC の問題のような気がしますが、実機でどうなるか知りたいですね。
- No.11177 一括表示へ - コメント元:11175 一括表示へ - [ 返信 ] [引用無し] pre