今日のテーマ   日々改造 (^_^;)         
[記事リスト(ツリー表示)]  [ 返信 ]   [新着記事] [最新50] [ワード検索] [過去ログ]

タイトル Re^2: PRIME88.BAS で 「169=素数?」問題
投稿日: 2024/04/06(土) 02:05
投稿者konno
 番 号 11195    11192 番 としき さんへのコメント    コメント数 2

> > PN88.BAS
> > 110  defdbl a-z                                 '倍精度指定
> 
> ここを単精度指定にしたらどうなるか、ということ。
> とても興味があります。

丁度良いテストプログラムを作ったので上げます。

3000 ' SQR88.BAS
3010 'defdbl a-z
3012 defsng a-z
3020 'screen 0
3030 cls
3040 input s
3042 OPEN "SQR.dat" FOR OUTPUT AS #1
3046 cc=0
3050 x = s / 2.0  '; // Is there any better way to determine initial value?
3060 lastx = 0.0 '; // the value one before the last step
3070 'while ( x != lastx ) '// until the difference is not significant
3090      lastx = x 
3100      x = (x + s / x) / 2.0 
3112      cc=cc+1
3114      print x;lastx,cc
3116      print#1, x;lastx,cc
3110  if   x < lastx  then 3070
3120  print "SQR(";s;")=";x,lastx,cc
3122  print#1, "SQR(";s;")=";x,lastx,cc
3124  close
3130  input a
3140 end

このプログラムで、TurboBasic の結果は

単精度
 43.25              84.5                   1 
 23.57875633239746  43.25                  2 
 15.37311267852783  23.57875633239746      3 
 13.18316555023193  15.37311267852783      4 
 13.00127220153808  13.18316555023193      5 
 13                 13.00127220153808      6 
 13                 13                     7 
SQR( 169 )= 13   13      7 回

倍精度
 43.25              84.5                   1 
 23.57875722543352  43.25                  2 
 15.37311286945074  23.57875722543352      3 
 13.18316604902914  15.37311286945074      4 
 13.00127244856782  13.18316604902914      5 
 13.00000006226796  13.00127244856782      6 
 13                 13.00000006226796      7 
 13                 13                     8 
SQR( 169 )= 13   13       8 回

倍精度の方が収束するのに1回多く掛かっています。
どちらでも計算は倍精度でやっているのがわかります。
一方、N88BASIC の結果は

単精度
 43.25            84.5             1 
 23.5788          43.25            2 
 15.3731          23.5788          3 
 13.1832          15.3731          4 
 13.0013          13.1832          5 
 13               13.0013          6 
 13               13               7 
SQR( 169 )= 13  13    7 回

倍精度
 43.25              84.5                   1 
 23.57875722543353  43.25                  2 
 15.37311286945074  23.57875722543353      3 
 13.18316604902914  15.37311286945074      4 
 13.00127244856782  13.18316604902914      5 
 13.00000006226796  13.00127244856782      6 
 13                 13.00000006226796      7 
 13                 13                     8 
 13                 13                     9 
SQR( 169 )= 13   13      9 回

おや、単精度の場合は SQR の計算も単精度なのか、それとも表示だけなのか?
倍精度では収束したのにさらにもう1回多く計算しています。???
この結果は、WHILE 文にしても同じでした。
そして、単精度の時だけ 169 が素数と誤判定しているのです。

このことから私は、「>」や「>=」などの比較式で単精度の時だけ誤差が出ていると疑ったのです。
V6.0に問題が有るかどうかは、実機で確認する以外にわからないと思います。

    - No.11195 一括表示へ   -   コメント元:11192 一括表示へ  -    [ 返信 ]    [引用無し] pre


- 関連一覧ツリー (先頭の番号をクリックするとツリー全体を一括表示します)
11135.TurboBasicで素数を表示カウントする PRIME2.EXE - konno 24/03/05-00:40
  ┣11137.Re: TurboBasicで素数を表示カウントする PRIME2.EXE - としき 24/03/05-13:22
  ┃┗11140.Re^2: TurboBasicで素数を表示カウントする PRIME2.EXE - konno 24/03/05-15:56
  ┃ ┗11147.Re^3: TurboBasicで素数を表示カウントする PRIME2.EXE - としき 24/03/07-02:18
  ┃  ┗11149.Re^4: TurboBasicで素数を表示カウントする PRIME2.EXE - konno 24/03/07-22:28
  ┃   ┗11160.Re^5: TurboBasicで素数を表示カウントする PRIME2.EXE - としき 24/03/12-12:32
  ┃    ┣11162.Re^6: TurboBasicで素数を表示カウントする PRIME2.EXE - konno 24/03/12-23:45
  ┃    ┗11164.Re^6: TurboBasicで素数を表示カウントする PRIME2.EXE - としき 24/03/17-17:26
  ┃     ┗11170.Re^7: TurboBasicで素数を表示カウントする PRIME2.EXE - としき 24/03/22-23:15
  ┃      ┗11172.Re^8: N88-BASICで素数を表示カウントする PRIME88.BAS - としき 24/03/24-15:59
  ┃       ┣11173.Re^9: N88-BASICで素数を表示カウントする PRIME88.BAS - konno 24/03/25-02:00
  ┃       ┃┣11174.Re^10: N88-BASICで素数を表示カウントする PRIME88.B.. - としき 24/03/25-23:13
  ┃       ┃┃┗11175.PRIME88.BAS で 「169=素数?」問題 - konno 24/03/26-20:11
  ┃       ┃┃ ┣11177.Re: PRIME88.BAS で 「169=素数?」問題解決か - konno 24/03/27-22:56
  ┃       ┃┃ ┗11192.Re: PRIME88.BAS で 「169=素数?」問題 - としき 24/04/05-02:07
  ┃       ┃┃  ┗11195.Re^2: PRIME88.BAS で 「169=素数?」問題 - konno 24/04/06-02:05
  ┃       ┃┃   ┣11198.Re^3: PRIME88.BAS で 「169=素数?」問題 - としき 24/04/06-11:27
  ┃       ┃┃   ┗11199.Re^3: PRIME88.BAS で 「169=素数?」問題 - としき 24/04/06-14:51
  ┃       ┃┃    ┗11200.Re^4: PRIME88.BAS で 「169=素数?」問題 - としき 24/04/06-23:09
  ┃       ┃┃     ┗11202.Re^5: PRIME88.BAS で 「169=素数?」問題 - としき 24/04/07-01:17
  ┃       ┃┃      ┗11203.Re^6: PRIME88.BAS で 「169=素数?」問題 - konno 24/04/07-20:41
  ┃       ┃┃       ┗11204.Re^7: PRIME88.BAS で 「169=素数?」問題 - konno 24/04/08-01:46
  ┃       ┃┃        ┗11205.Re^8: PRIME88.BAS で 「169=素数?」問題 - としき 24/04/08-12:28
  ┃       ┃┃         ┗11206.SQRの単精度と倍精度の表示検証ソース - konno 24/04/08-23:33
  ┃       ┃┃          ┗11207.Re: SQRの単精度と倍精度の表示検証ソース - としき 24/04/09-15:06
  ┃       ┃┃           ┗11208.Re^2: SQRの単精度と倍精度の表示検証ソ.. - konno 24/04/09-22:44
  ┃       ┃┃            ┗11209.Re^3: SQRの単精度と倍精度の表示検証ソ.. - としき 24/04/10-17:44
  ┃       ┃┃             ┣11210.Re^4: SQRの単精度と倍精度の表示検証.. - konno 24/04/10-21:56
  ┃       ┃┃             ┃┗11211.Re^5: SQRの単精度と倍精度の表示検証.. - としき 24/04/10-23:25
  ┃       ┃┃             ┃ ┗11213.Re^6: SQRの単精度と倍精度の表示検.. - konno 24/04/11-20:13
  ┃       ┃┃             ┗11215.Re^4: SQRの単精度と倍精度の表示検証.. - としき 24/04/13-01:13
  ┃       ┃┃              ┗11216.Re^5: SQRの単精度と倍精度の表示検証.. - konno 24/04/13-22:03
  ┃       ┃┃               ┗11218.Re^6: SQRの単精度と倍精度の表示検.. - としき 24/04/14-12:14
  ┃       ┃┃                ┗11219.Re^7: SQRの単精度と倍精度の表示検.. - konno 24/04/15-01:15
  ┃       ┃┃                 ┗11220.Re^8: SQRの単精度と倍精度の表示.. - としき 24/04/15-13:56
  ┃       ┃┃                  ┗11221.Re^9: SQRの単精度と倍精度の表示.. - konno 24/04/16-00:04
  ┃       ┃┃                   ┗11222.Re^10: SQRの単精度と倍精度の表.. - としき 24/04/16-12:22
  ┃       ┃┃                    ┗11223.Re^11: SQRの単精度と倍精度の.. - konno 24/04/16-23:58
  ┃       ┃┃                     ┗11224.Re^12: SQRの単精度と倍精度の.. - としき 24/04/17-02:14
  ┃       ┃┃                      ┗11225.Re^13: SQRの単精度と倍精度.. - konno 24/04/17-23:21
  ┃       ┃┣11176.Re^10: N88-BASICで素数を表示カウントする PRIME88.B.. - konno 24/03/27-00:26
  ┃       ┃┃┣11178.Re^11: N88-BASICで素数を表示カウントする PRIME88... - としき 24/03/28-00:43
  ┃       ┃┃┃┗11179.SQRの計算式 - konno 24/03/30-15:58
  ┃       ┃┃┃ ┗11180.Re: SQRの計算式 - としき 24/03/30-23:41
  ┃       ┃┃┃  ┗11184.Re^2: SQRの計算式 - konno 24/03/31-22:26
  ┃       ┃┃┗11182.Re^11: N88-BASICで素数を表示カウントする PRIME88... - としき 24/03/31-15:48
  ┃       ┃┗11181.Re^10: N88-BASICで素数を表示カウントする PRIME88.B.. - としき 24/03/31-14:09
  ┃       ┗11183.Re^9: N88-BASICで素数を表示カウントする PRIME88.BAS - としき 24/03/31-16:08
  ┃        ┗11185.Re^10: N88-BASICで素数を表示カウントする PRIME88.B.. - konno 24/04/01-00:27
  ┃         ┣11186.T98-NEXT でN88BASIC検証 - konno 24/04/02-00:16
  ┃         ┗11187.Re^11: N88-BASICで素数を表示カウントする PRIME88... - としき 24/04/03-16:20
  ┃          ┗11189.Re^12: N88-BASICで素数を表示カウントする PRIME88.. - konno 24/04/04-01:01
  ┃           ┗11191.Re^13: N88-BASICで素数を表示カウントする PRIME8.. - としき 24/04/04-12:15
  ┃            ┗11194.Re^14: N88-BASICで素数表示の問題 - konno 24/04/06-01:40
  ┃             ┗11197.Re^15: N88-BASICで素数表示の問題 - としき 24/04/06-11:26
  ┗11150.オリジナルの prime.bas のソース - konno 24/03/07-22:43
   ┗11156.Re: オリジナルの prime.bas のソース - としき 24/03/10-18:50
    ┣11158.Re^2: オリジナルの prime.bas のソース - konno 24/03/11-00:45
    ┃┗11159.Re^3: オリジナルの prime.bas のソース - としき 24/03/12-02:16
    ┃ ┗11161.MOD と ¥ の有効範囲 - konno 24/03/12-22:45
    ┃  ┗11165.Re: MOD と ¥ の有効範囲 - konno 24/03/18-00:36
    ┃   ┗11166.Re^2: MOD と ¥ の有効範囲 - としき 24/03/20-01:44
    ┃    ┗11167.Re^3: MOD と ¥ の有効範囲 - konno 24/03/21-00:00
    ┃     ┗11168.Re^4: MOD と ¥ の有効範囲 - としき 24/03/21-11:14
    ┃      ┗11171.Re^5: MOD と ¥ の有効範囲 - konno 24/03/24-00:08
    ┗11163.Re^2: オリジナルの prime.bas のソース - としき 24/03/17-17:09
     ┗11169.Re^3: オリジナルの prime.bas のソース - としき 24/03/22-23:02

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)   [引用無し]
おなまえ 
Eメール 
タイトル 
メッセージ auto soft pre(図表、プログラム) ※折り返さずに改行を入れてね
 参照先 
 暗証キー (英数字で8文字以内)
 プレビュー          

- 以下のフォームから自分の投稿記事を修正・削除することができます -
   処理   記事No   暗証キー
    [ページトップへ] [管理用]