タイトル | : PRIME88.BAS で 「169=素数?」問題 |
投稿日 | : 2024/03/26(火) 20:11 |
投稿者 | : konno | 番 号 | : 11175 11174 番 としき さんへのコメント コメント数 2 |
> > 169 は、13*13=169 なので、素数では無いと思います。>> こっちは大問題ですね。仕様どおりの挙動をしないのですから。> 倍精度から単精度に精度を落としたことが悪いのか、それとも割り算と掛け算の> 誤差の問題か。私は当初 NP2 のCPUエミュレーション等のバグを疑いました。 それで、anex86 でも試したのですが、結果は同じ。98NEXT では固まってしまいました。 次に疑ったのが、BASICコンパイラが壊れていないか。 1988/08/24 00:00 61,440 BASICC.COM 中身が壊れているることもありうるので、98実機での結果が知りたいところですね。 条件を色々変えて試しても結果は変わらなかったのですが、ひとつだけ N88P.BAS 100 INPUT N 110 IF N MOD 2=0 THEN 120 ELSE *ELSE1 120 IF N=2 THEN PRINT "素数" ELSE PRINT "合成数" 130 GOTO *ENDIF1 140 *ELSE1 150 I=3 160 WHILE (I<=SQR(N)) AND (N MOD I<>0) 170 I=I+2 180 WEND 190 IF I<=SQR(N) THEN PRINT "合成数" ELSE PRINT "素数" 200 *ENDIF1 202 input a 210 END このプログラムでは、169 は「素数」と表示されます。 ところがオリジナルを若干修正した以下 PN88.BAS 100 'pn88.bas 110 defdbl a-z '倍精度指定 1000 INPUT n 1010 IF (n MOD 2)=0 THEN IF n=2 THEN PRINT "素数" ELSE PRINT "合成数" 1020 j!=sqr(n) 'ELSE 1030 FOR i!=3 TO SQR(n) STEP 2 1040 IF n MOD i!=0 THEN *EXIT1 1050 NEXT i! 1052 *EXIT1 1060 IF i!<=SQR(n) THEN PRINT "合成数";i!;j! 1062 IF i!>SQR(n) THEN PRINT "素数";i!;j! 1070 input a 'END IF 1080 END このプログラムでは、169 は「合成数」と表示されます。 違いは、変数全体を倍精度にし、FOR 文の変数を単精度にしただけかな。 # うーん、これを反映させても改善しない。何故だー! (;_;)
- No.11175 一括表示へ - コメント元:11174 一括表示へ - [ 返信 ] [引用無し] pre