人気ブログランキング |

ブログトップ

電子工作やってみたよ

DM42で円周率10000桁の計算ができました。
演算時間はUSB電源で10時間 30分前はまだ動いていて10時間目に見たら停止していたので10時間弱ということですね。
これ HP42Sでやると10時間×750倍 => 7500時間 => 312日
電池ももたないし不可能ですね。

演算結果はまた円周率表と比較して正常でした。
(見たのはプログラムの下に示した 前部、中央部、後部についてです。)
ただキャリー処理の部分を停止してあったので直してやり直してみますけれど。
時間のかかるものは、動作の確認するだけでもたいへんですね。


いつもコメントくれるkusakaさんがたまたまそばにいたので「10000桁出来た」と言ったら
「それで」という返事。 
そうなんですよね、電卓や円周率に興味ない人にとっては、「それが どうしたの」という感じなのでしょうね。
わたしにとっては、ゲームセンターの機械よりは、はるかに面白いものですけど。

ここで使う電卓はやはりHP電卓でないとダメですね。
かっこの無いRPN(逆ポーランド法)だからこそ演算のひとつひとつの手順がはっきりとしているのですから。
これ数式通りの電卓やパソコンの数学ソフトでやったら、楽しみが半減すると思います。
こんなこと言っておきながら、わたしまだこのプログラムからどうして円周率が出てくるのか理解できないのです。

まだまだ楽しみは尽きないですね。


c0335218_14441607.jpg




全プログラムリスト 


全プログラムリスト

円周率 1レジスタに10桁表示

Many Digits of Pi by Katie Wasserman - MoHPC
www.hpmuseum.org/cgi-sys/cgiwrap/hpmuseum/articles.cgi?read=899

オリジナルの計算式

π = 2 + 1/3( 2 + 2/5( 2 + 3/7( 2 + ・・・ ( 2 + k/(2k+1)( 2 + ・・・)))・・・))


計算したのはDM42
  ここまでくると HP42S ではメモリーサイズR880が最大なので動作できない。

01 LBL "AA"
02 SIZE 1005 変数領域の確保 R0~R1004
         (この定義ではR1005をアクセスするとエラーとなる、
         もっと大きく出来るがここまでとする)
03 FIX 00 小数点以下表示しない
04 CLRG 変数領域消去
05 35E3 (35000) ***** 1017=>35000 10000桁計算に概略必要と思われる値
06 STO 01
*

07 LBL 1 mainループの先頭
08 2
09 STO "II"
10 0 CARRYの初期値

*
11 LBL 02 レジスター計算ループの先頭
12 1E10 ***** 1レジスタ10桁表示
13 ×     10,000,000,000倍する
14 RCL IND "II"
15 RCL 01
16 ×
17 +
18 ENTER
19 ENTER
20 ENTER
21 RCL 01
22 2
23 ×
24 1
25 +
26 ÷
27 LSTX
28 X<>Y
29 IP (INTのこと)
30 STO IND "II"
31 ×
32 -
33 1
34 STO +"II"
35 R↓
36 RCL "II"
37 1005 ***** 54=> 1005   レジスタR1004まで計算する
38 -
39 X=0?
40 GTO 03
41 R↓
42 GTO 02

*
43 LBL 03
44 2
45 STO 02
46 RCL 01
47 1
48 -
49 STO 01
50 X>0 ?
51 GTO 01
-------------------------------------
52 1004 ***** 53 => 1004  レジスター計算末尾  
53 STO "II"
54 0 最初はキャリー無しから始まる

*
55 LBL 04 ---桁上がり処理ループ先頭------------
56 STO+ IND "II" 上位のレジスタへキャリーを加算 0 or 1
57 RCL IND "II" O or 1 の加算されたレジスタを読み込む
58 1E10      E6 => E10 10,000,000,000で割り算
59 ÷
60 INT 11桁目(キャリー)を取り出す
61 STO 01 キャリーをR1にセーブしておく
62 1E10 ***** キャリーを10,000,000,000倍する
63 ×
64 STO- IND "II" キャリーを含んだ元の数値からキャリーのみ引く
65 RCL 01 キャリーをR1からXレジスターに戻す
66 DSE "II" インデックスポインター1を引いて 0でないならLBL4へ戻る
67 GTO 04
68 RCL 02 円周率の頭の3を読み込んで終わりとする
69 RTN


計算した答え

R02 2,         ミスでキャリー処理を止めていた。
             キャリーくれば3となり正常
R03 11,415,926,535  ここR03の最初の1が繰り上り
             R02に加算される
R04 8,979,323,846
R05 2,643,383,279  


R500 4,263,129,860
R501 8,099,888,687
R502 4,132,604,721
R503 5,695,162,396

|
|
R1000 9,596,881,592
R1001  560,010,165
R1002 5,256,375,678 最後の8が小数点以下 10000桁目
R1003 5,667,227,966 最後10010桁目
R1004 1,279,988,578 最後10020桁目
R1005 ここをアクセスすると サイズエラーとなる



========
修正 2019-7-26
プログラムの表記でHP42Sでは違うところがいくつか在りましたので訂正しました。



今年の田んぼアート まだ田植えしたばかりで苗が小さいですが何とか読めますね 「令和」と川場村の「カワタン」?だったかな
c0335218_07215930.jpg

この花だけは毎年すごく元気ですね。 いつもこうありたいですけれど。
c0335218_07240977.jpg

タマネギ 掘りました。
大きいのから小さいのまでいろいろあります。


c0335218_07254309.jpg


一番大きいやつです。 実物は大きいのですが写真で見るとそれほど大きく感じないですね。
c0335218_07275809.jpg



電子工作ランキング

にほんブログ村 その他趣味ブログ 電子工作へ
にほんブログ村





by telmic-gunma | 2019-06-21 04:05 | HP電卓 | Comments(2)

1レジスタ10桁表示がうまく行ったのでR99まで使って円周率を計算しました。
小数点以下970桁です。
時間は詳しく計っていなかったのですが電池動作で20分以下でした。
数値の確認は 先頭部、中央部、終端部を円周率表と照らし合わせて一致していました。
10桁単位の表示は円周率表と同じなので探すのが楽でした。
HP42Sは表示12桁内部演算15桁なので10桁表示がうまく動作したのかもしれません。
HP15Cの10桁演算10桁表示でうまく行くか判りません。
相変わらず、このプログラムの動作はまだ理解できていません。

c0335218_14441607.jpg

全プログラムリスト 


全プログラムリスト

円周率 1レジスタに10桁表示(とりあえずの試し実験)

Many Digits of Pi by Katie Wasserman - MoHPC
www.hpmuseum.org/cgi-sys/cgiwrap/hpmuseum/articles.cgi?read=899

オリジナルの計算式

π = 2 + 1/3( 2 + 2/5( 2 + 3/7( 2 + ・・・ ( 2 + k/(2k+1)( 2 + ・・・)))・・・))


DM42 ( HP42S )

01 LBL AA
02 SIZE 100 変数領域の確保 R0~R99(もっと大きく出来るがここまで)
03 FIX 00 小数点以下表示しない
04 CLRG 変数領域消去
05 3700 ***** 1017 =>3700 970桁計算に概略必要と思われる値
06 STO 01
*

07 LBL 1 mainループの先頭
08 2
09 STO II
10 0 CARRYの初期値

*
11 LBL 02 レジスター計算ループの先頭
12 1E10 ***** 1レジスタ10桁表示
13 ×     10,000,000,000倍する
14 RCL IND II
15 RCL 01
16 ×
17 +
18 ENTER
19 ENTER
20 ENTER
21 RCL 01
22 2
23 ×
24 1
25 +
26 ÷
27 LSTX
28 X<>Y
29 INT
30 STO(i)
31 ×
32 -
33 1
34 STO +II
35 R↓
36 RCL II
37 100 ***** 54=> 100   レジスタR99まで計算する
38 -
39 X=0?
40 GTO 3
41 R↓
42 GTO 2

*
43 LBL 3
44 2
45 STO 2
46 RCL 1
47 1
48 -
49 STO 1
50 X>0 ?
51 GTO 1
-------------------------------------
52 99 ***** 53 => 99 修正  
53 STO II
54 0 最初はキャリー無しから始まる

*
55 LBL 4 ---桁上がり処理ループ先頭------------
56 STO +(i) 上位のレジスタへキャリーを加算 0 or 1
57 RCL (i) O or 1 の加算されたレジスタを読み込む
58 1E10      E6 => E10 10,000,000,000で割り算
59 ÷
60 INT 7桁目(キャリー)を取り出す
61 STO 1 キャリーをR1にセーブしておく
62 1E10 ***** キャリーを10,000,000,000倍する
63 ×
64 STO -(i) キャリーを含んだ元の数値からキャリーのみ引く
65 RCL 1 キャリーをR1からXレジスターに戻す
66 DSE II インデックスポインター1を引いて 0でないならLBL4へ戻る
67 GTO 4
68 RCL 2 円周率の頭の3を読み込んで終わりとする
69 RTN


答えの 1レジスタに10桁表示。


R02 3,
R03 1,415,926,535
R04 8,979,323,846
R05 2,643,383,279  


R50 1,885,752,724
R51 8,912,279,381
R52 8,301,194,912
|
|
R97 9,375,195,778
R98 1,857,780,532
R99 1,712,268,066

最後小数点以下 970桁目


========




電子工作ランキング

にほんブログ村 その他趣味ブログ 電子工作へ
にほんブログ村

by telmic-gunma | 2019-06-19 03:22 | HP電卓 | Comments(2)

すがわらさんからのアイデアをいただいて1レジスタ 10桁表示をやってみました。
とりあえず答えは2行だけですが、すんなり出来ました。
ただこれはDM42(HP42S)での話でHP15Cで動作するかは試してありません。
全体の動作を理解できていないのに改造ばかりでいいのかな。

改造個所は以下の3か所です。
1E6 を 1E10 に変更しています。
12行、58行、62行

c0335218_14441607.jpg


全プログラムリスト 


全プログラムリスト

円周率 1レジスタに10桁表示(とりあえずの試し実験)

Many Digits of Pi by Katie Wasserman - MoHPC
www.hpmuseum.org/cgi-sys/cgiwrap/hpmuseum/articles.cgi?read=899

オリジナルの計算式

π = 2 + 1/3( 2 + 2/5( 2 + 3/7( 2 + ・・・ ( 2 + k/(2k+1)( 2 + ・・・)))・・・))


DM42 ( HP42S )

01 LBL AA
02 SIZE 100 変数領域の確保 R0~R99(もっと大きく出来るがここまで)
03 FIX 00 小数点以下表示しない
04 CLRG 変数領域消去
05 70 ***** 1017 =>70 修正 3レジスタしか計算しない
06 STO 01
*


07 LBL 1 mainループの先頭
08 2
09 STO II
10 0 CARRYの初期値

*
11 LBL 02 レジスター計算ループの先頭
12 1E10 ***** 1レジスタ10桁表示
13 ×     10,000,000,000倍する
14 RCL IND II
15 RCL 01
16 ×
17 +
18 ENTER
19 ENTER
20 ENTER
21 RCL 01
22 2
23 ×
24 1
25 +
26 ÷
27 LSTX
28 X<>Y
29 INT
30 STO(i)
31 ×
32 -
33 1
34 STO +II
35 R↓
36 RCL II
37 5 ***** 54=> 5   レジスタ3個しか計算しない
38 -
39 X=0?
40 GTO 3
41 R↓
42 GTO 2

*
43 LBL 3
44 2
45 STO 2
46 RCL 1
47 1
48 -
49 STO 1
50 X>0 ?
51 GTO 1
-------------------------------------
52 4 ***** 53 => 5 修正  
        桁上がり(キャリー)処理
        を後ろのレジスタ(4番目)より順に処理する
53 STO II
54 0 最初はキャリー無しから始まる

*
55 LBL 4 ---桁上がり処理ループ先頭------------
56 STO +(i) 上位のレジスタへキャリーを加算 0 or 1
57 RCL (i) O or 1 の加算されたレジスタを読み込む
58 1E10      E6 => E10 10,000,000,000で割り算
59 ÷
60 INT 7桁目(キャリー)を取り出す
61 STO 1 キャリーをR1にセーブしておく
62 1E10 ***** キャリーを10,000,000,000倍する
63 ×
64 STO -(i) キャリーを含んだ元の数値からキャリーのみ引く
65 RCL 1 キャリーをR1からXレジスターに戻す
66 DSE II インデックスポインター1を引いて 0でないならLBL4へ戻る
67 GTO 4
68 RCL 2 円周率の頭の3を読み込んで終わりとする
69 RTN


答えの 1レジスタに10桁表示。


R02 3,
R03 1,415,926,535
R04 8,979,323,846  

最後小数点以下 20桁目


========




電子工作ランキング

にほんブログ村 その他趣味ブログ 電子工作へ
にほんブログ村

by telmic-gunma | 2019-06-19 01:53 | HP電卓 | Comments(0)

まだ 計算式とプログラムの関係がよく解らないのですが、
いろい調べていて演算桁数を広げる方法が見えてきたので挑戦して見ます。
オリジナルのHP15Cでは変数領域はR00~R53を使用し円周率の計算結果をR02~R53まで使って306桁を出力していましたが
DM42の直接アドレス領域一杯のR02~R99までを使って582桁までやってみました。
間接アドレスを使えばさらに広い範囲をアクセスできますが、そこは次回に挑戦して見ます。
修正箇所は以下の3か所だけです。

37行  54 => 100
52行  53 => 99
5行  1017 => 2040

出力された答えは、 先頭部、中央部、終わりの所を円周率表と見比べて確認しました。

ここが同一ならば全体があっていると言ってもいいのですよね。

c0335218_14441607.jpg


全プログラムリスト 

円周率582桁全プログラムリスト

Many Digits of Pi by Katie Wasserman - MoHPC
www.hpmuseum.org/cgi-sys/cgiwrap/hpmuseum/articles.cgi?read=899

オリジナルの計算式

π = 2 + 1/3( 2 + 2/5( 2 + 3/7( 2 + ・・・ ( 2 + k/(2k+1)( 2 + ・・・)))・・・))


DM42 ( HP42S )

01 LBL AA
02 SIZE 100 変数領域の確保 R0~R99(もっと大きく出来るがここまで)
03 FIX 00 小数点以下表示しない
04 CLRG 変数領域消去
05 2040   ***** 1017 => 2040 修正
06 STO 01
*

07 LBL 1 mainループの先頭
08 2
09 STO II
10 0 CARRYの初期値

*
11 LBL 02 レジスター計算ループの先頭
12 1E6
13 ×
14 RCL IND II
15 RCL 01
16 ×
17 +
18 ENTER
19 ENTER
20 ENTER
21 RCL 01
22 2
23 ×
24 1
25 +
26 ÷
27 LSTX
28 X<>Y
29 INT
30 STO(i)
31 ×
32 -
33 1
34 STO +II
35 R↓
36 RCL II
37 100 ***** 54=> 100 ここを修正
38 -
39 X=0?
40 GTO 3
41 R↓
42 GTO 2

*
43 LBL 3
44 2
45 STO 2
46 RCL 1
47 1
48 -
49 STO 1
50 X>0 ?
51 GTO 1
-------------------------------------
52 53 ***** 53 => 99 修正  
        桁上がり(キャリー)処理
        を後ろのレジスタ(99番目)より順に処理する
53 STO II
54 0 最初はキャリー無しから始まる

*
55 LBL 4 ---桁上がり処理ループ先頭------------
56 STO +(i) 上位のレジスタへキャリーを加算 0 or 1
57 RCL (i) O or 1 の加算されたレジスタを読み込む
58 E6 1000000で割り算
59 ÷
60 INT 7桁目(キャリー)を取り出す
61 STO 1 キャリーをR1にセーブしておく
62 E6 キャリーを1000000倍する
63 ×
64 STO -(i) キャリーを含んだ元の数値からキャリーのみ引く
65 RCL 1 キャリーをR1からXレジスターに戻す
66 DSE II インデックスポインター1を引いて 0でないならLBL4へ戻る
67 GTO 4
68 RCL 2 円周率の頭の3を読み込んで終わりとする
69 RTN


答えは R3 から R99 までひとつのメモリーに6桁分づつ入っています。
この計算でキャリーのあるところは R32 R23 R19 R17 R11 R3 です。
円周率582桁の答えは以下の通りです。(書くまでもないですね。)
+
R02 3
R03 141592
R04 653589
R05 793238
R06 462643
R07 383279
R08 502884
R09 197169
R10 399375
R11 105820
R12 974944
R13 592307
R14 816406
|
|
R50 393607
R51 260249
R52 141273
R53 724586
|
|
R70 057270
R71 365759
R72 591953
|
|
R97 217176
R98 293176
R99 752384 最後小数点以下 582桁目

========



ジャガイモの花
それなりにきれいですね。
c0335218_14594850.jpg
これもジャガイモ

c0335218_14595700.jpg

日陰のミョウガ   元気です。  まだ移植して数週間ですから。
c0335218_15015816.jpg

日向のミョウガ  こっちのが元気かな?  何年もこの場所だからね。
c0335218_15021878.jpg

これは何でしょうか?  地面がバックだと引き立たないですね。
c0335218_15081407.jpg

三角の形の白のアジサイ、まだ途中なのでこれからですね。
c0335218_15094637.jpg


電子工作ランキング

にほんブログ村 その他趣味ブログ 電子工作へ
にほんブログ村

by telmic-gunma | 2019-06-15 14:45 | HP電卓 | Comments(2)

インターネット上で電卓を使っての円周率の計算を発表している方がいましたので、
それらを参考にさせていただいてDM42(HP42S)でやってみました。

以下の方たちを参考にしました。ありがとうございます。(連絡してませんけれど)

1、「 高機能電卓の情報 」 akatukiさん
2、「 e-Gadge-プログラム関数電卓 」
3、「 Many Digits of Pi by Katie Wasserman - MoHPC 」
www.hpmuseum.org/cgi-sys/cgiwrap/hpmuseum/articles.cgi?read=899

3の中のHP15CのものをベースにしてDM42(HP42S)に移しました。
変更部分はわずかですが、わずか故にムシがなかなか見つかりませんでした。
下に同じ動作するソフト(15Cと42S)を併記してあります。

(結果)
円周率306桁の演算時間は以下の通りです。
やはり DM42は凄いです。
1分くらいなら気楽に挑戦できますけれど、10時間超えると電池が持つか心配になりますね。
ましてや40時間なんて、やった人いないのでしょうね。
そうそう デバッグして修正して確認するだけでも結果が出るのは明後日だよなんてやってられないでしょう。


DM42(USB駆動 電池の3倍速)   54秒       実測
HP42S               11時間15分位 計算にて予測

HP15C_LE             16分位      実測
HP15C               40時間位     計算にて予測


これだけスピードが速いと今まで出来なかったことも、いろいろとオモチャできますね。
どんなことがあるだろう。


今現在の状況 (2019年6月8日)

  Piを出す式は分かりました。
  プログラムは動きました。
  答えは出て、合っています。
  しかし どうして この式がこのプログラムになるのか理解できません。

ここからがHP電卓の楽しみかもしれませんね。
パズル、ちえの輪 HP電卓(RPN電卓とも言う)という名のゲームマシン 本領発揮ですね。
理解出来たら このリストにコメントをしっかり書きますね。

c0335218_10080924.jpg


全プログラムリスト 

Many Digits of Pi by Katie Wasserman - MoHPC
www.hpmuseum.org/cgi-sys/cgiwrap/hpmuseum/articles.cgi?read=899

π = 2 + 1/3( 2 + 2/5( 2 + 3/7( 2 + ・・・ ( 2 + k/(2k+1)( 2 + ・・・)))・・・))

    左側リスト       右側リスト
HP15C ( HP15C_LE ) DM42 ( HP42S )
オリジナルのもの HP15C用をHP42Sように修正したもの

01    LBL AA        42.21.11       01    LBL AA
02 5 5 02 SIZE 100 変数領域の確保 R0~R99
03 3 3
04 DIM(i) 42.23.24
05 FIX 0 42. 7. 0 03 FIX 00 小数点以下表示しない
06 CLR REG 42.34 04 CLRG 変数領域消去
07 1 1 05 1017
08 0 0
09 1 1
10 7 7
11 STO 1 44.1 06 STO 01
12    LBL 1         42.21.1         07    LBL 1       mainループの先頭
13 2 2 08 2
14 STO II 44.25 09 STO II
15 0 0 10 0 CARRYの初期値
16    LBL 2         42.21.2        11    LBL 02      レジスター計算ループの先頭
17 EEX 26 12 1E6
18 6 6
19 × 20 13 ×
20 RCL(i) 45.24 14 RCL IND II
21 RCL 1 45.1 15 RCL 01
22 × 20 16 ×
23 + 40 17 +
24 ENTER 36 18 ENTER
25 ENTER 36 19 ENTER
26 ENTER 36 20 ENTER
27 RCL 1 45.1 21 RCL 01
28 2 2 22 2
29 × 20 23 ×
30 1 1 24 1
31 + 40 25 +
32 ÷ 10 26 ÷
33 LSTX 43.36 27 LSTX
34 X<>Y 34 28 X<>Y
35 INT 43.44 29 INT
36 STO(i) 44.24 30 STO(i)
37 × 20 31 ×
38 - 30 32 -
39 1 1 33 1
40 STO +II 44.40.25 34 STO +II
41 R↓ 33 35 R↓
42 RCL II 45.25 36 RCL II
43 5 5 37 54
44 4 4
45 - 30 38 -
46 X=0? 43.20 39 X=0?
47 GTO 3 22.3 40 GTO 3
48 R↓ 33 41 R↓
49 GTO 2 22.2 42 GTO 2
50    LBL 3      42.21.3           43    LBL 3
51 2 2 44 2
52 STO 2 44.2 45 STO 2
53 RCL 1 45.1 46 RCL 1
54 1 1 47 1
55 - 30 48 -
56 STO 1 44.1 49 STO 1
57 X>0 ? 43.30.1 50 X>0 ?
58 GTO 1 22.1 51 GTO 1
-------------------------------------
59 5 5 52 53 桁上がり(キャリー)レジスターを
60 3 3 後ろのレジスタ(53番目)より順に処理する
61 STO II 44.25 53 STO II
62 0 0 54 0 最初はキャリー無しから始まる
63    LBL 4      42.21.4          55    LBL 4      ---桁上がり処理ループ先頭------------
64 STO +(i) 44.40.24 56 STO +(i) 上位のレジスタへキャリーを加算 0 or 1
57 RCL (i) 45.24 57 RCL (i) O or 1 の加算されたレジスタを読み込む
66 EEX 26 58 E6 1000000で割り算
67 6 6
68 ÷ 10 59 ÷
69 INT 43.44 60 INT 7桁目(キャリー)を取り出す
70 STO 1 44.1 61 STO 1 キャリーをR1にセーブしておく
71 EEX 26 62 E6 キャリーを1000000倍する
72 6 6
73 × 20 63 ×
74 STO -(i) 44.30.24 64 STO -(i) キャリーを含んだ元の数値からキャリーのみ引く
75 RCL 1 45.1 65 RCL 1 キャリーをR1からXレジスターに戻す
76 DSE II 42.5.25 66 DSE II インデックスポインター1を引いて
0でないならLBL4へ戻る
77 GTO 4 22.445.2 67 GTO 4
78 RCL 2 45.2 68 RCL 2 円周率の頭の3を読み込んで終わりとする
79 RTN 43.32 69 RTN

(注) HP15Cでは変数 I は 1 と判りやすくするため II と書いています。

答えは R3 から R53 までひとつのメモリーに6桁分づつ入っています。
この計算でキャリーのあるところは R32 R23 R19 R17 R11 R3 です。
円周率306桁の答えは以下の通りです。(書くまでもないですね。)

R02    3
R03 141592
R04 653589
R05 793238
R06 462643
R07 383279
R08 502884
R09 197169
R10 399375
R11 105820
R12 974944
R13 592307
R14 816406
|
|
|
R52 141273
R53 724586

========



今年も咲きました。 アルストロメリア  一年たつの早いですね。
c0335218_19443212.jpg


c0335218_19525419.jpg


なでしこ   手入れも何もしていません。去年のままですけれど綺麗に咲きます。

c0335218_19454947.jpg



c0335218_19535951.jpg



新しい場所に植えたイチゴ、大きいのも少しありましたが、ほとんどは小さいままでした。
数は圧倒的に少なくなりました。
移植したせいか、場所が悪かったのか、なにもしない方が良かったみたい。
野菜、くだもの、花 などの生き物を育てるのも難しいですね。
何が悪いと教えてくれるわけでなく、ただ枯れていくだけ。
そして結果が出るのにとても時間がかかり、失敗に気がついて修正しても結果がでるのは1年先とか。
c0335218_19514809.jpg




c0335218_19545676.jpg



電子工作ランキング

にほんブログ村 その他趣味ブログ 電子工作へ
にほんブログ村

by telmic-gunma | 2019-06-08 20:06 | HP電卓 | Comments(8)

DM42で乱数を遊ぶ (3)

前回モンテカルロ法を使って遊んでみましたが、2017年11月16日 HP42S でやったのと同じことをDM42 でサンプリング数を増やしてやってみました。
モンテカルロ法でランダムにやるのでなく等間隔で均一にやってみようというわけです。
DM42ならHP42Sの750倍高速ですし、何より電池を消耗しないという大きなメリットがあります。
図のNo1はモンテカルロ法で、ひとつの真四角の中に乱数でランダムに点を置いて半円(1/4円)の内側にあるかを調べて数の比率で円周率を求めます。

c0335218_10495804.jpg


c0335218_10462042.jpg



全プログラムリスト 
DM42(HP42Sと同じ) 動作はUSBで電源供給なので電池の3倍速で動いています。

01 LBL "AA"
02 0
03 STO X * X座標のポイント
04 STO Y   * Y座標のポイント
05 STO T   * トータルポイント数
06 STO P   * 円内部の点の数 (x^2 + Y^2)が1以下
07   LBL  "BB"     * ループ先頭ラベル
08 XEQ "HH" * 円内部の点の数を数えるサブルーチンへ行く(x^2 + Y^2)が1以下
09 0.001 * 1ステップのY移動値
10 STO +Y   * Yに1ステップ分を加算する。
11 RCL Y   * 1ステップ分移動したY値を読み込む
12 1      * 円の内側かいなかチェックする値(1)をセット
13 X>Y ?    * 円の内側ならば
14 GTO "BB"  * ラベルBBへ行く
15 0      * 0を読み込む
16 STO Y   * Yの座標位置をゼロとする
17 0.001    * 座標 1ステップ分読み込み
18 STO +X   * Y座標 1ステップ分加算
19 RCL X   * 1ステップ分移動したX値を読み込む
20 1      * 円の内側かいなかチェックする値(1)をセット
21 X>Y ?    * 円の内側ならば
22 GTO "BB"  * ラベルBBへ行く
23 RCL T   * トータルポイント数
24 RCL P   * 円内部の点の数 (x^2 + Y^2)が1以下
25 STOP    *


26   LBL  "HH"  *  円内部の点の数を数えるサブルーチンへ行く(x^2 + Y^2)が1以下
27 1      *
28 STO +T   * 測定トータル数を+1
29 RCL X   *
30 X^2 * 現在のX座標値を2乗する
31 RCL Y   *
32 X^2     * 現在のY座標値を2乗する
33 +      * 現在のX座標値を2乗とY座標値の2乗を加算する
34 1       *
35 X<Y ?    * 結果が1より大きければ円の外なので何もせずにリターン
36 RTN     * 結果が1より大きければ円の外なので何もせずにリターン
37 1      *
38 STO +P   * 結果が1以下ならば円の内側なので円内部の点の数に1加算してもどる
39 RTN     *

使用した変数
X * X座標のポイント
Y   * Y座標のポイント
T   * トータルポイント数
P   * 円内部の点の数 (x^2 + Y^2)が1以下



結果A     100dig * 100dig = 10,000点の時
0.01ごとに0~1まで
円の内側の点  7,953
真四角の全点 10,000
円周率  ( 7,953 * 4 )  /  10,000   =  3.1812
*有効桁は2桁


結果B 1,000dig * 1,000dig = 1,000,000点の時
DM42 USB電源にて  8分55秒
0.001ごとに0~1まで
円の内側の点  786,338
真四角の全点 1,000,000
円周率  ( 786,338 * 4 ) / 1,000,000 = 3.14554
*有効桁は3桁


結果C 10,000dig * 10,000dig = 100,000,000点の時
DM42 USB電源にて  約15時間
0.0001ごとに0~1まで
円の内側の点  78,549,762
真四角の全点 100,000,000
円周率  ( 78,549,762 * 4 ) / 100,000,000 = 3.14199048
*有効桁は4桁

========


結果A サンプリング数 10,000点の時   3.1812
結果B サンプリング数 1,000,000点の時 3.14554
結果C サンプリング数 100,000,000点の時 3.14199048

乱数ではなく縦横規則正しいポイントならばサンプリング数に比例して精度が上がりますね。
しかしこれはまったくの遊びですね。高速のDM42を使って15時間もかけたのに有効数字4桁なんて。
DM42でUSB電源はいいですね、今までのように長時間でも電池代金を気にしなくていいのですから。 
これHP42Sでやったならば途中で電池切れをおこして答えは出ないでしょう。
15時間の750倍とは11250時間 これは469日 なんと1.28年  
まあ 電池がもったいし、一年もやっている人絶対いないでしょう。


ふと思ったのですが、乱数を使ったこのモンテカルロ法は、
最近はやりの選挙で行われている「出口調査」やNHKの世論調査と同じですね。
精度はせいぜい2桁ぐらいだけれど、少ないサンプリング数で大まかな動向を出せると言う事でしょう。


このHP電卓のRPN言語は、本当にアセンブラと同じですね。
コメントの書いてないリストは、自分で作った物でさえ後から見ると全く動作が解りませんでした。
これからは、ブログラムの一行ごとに真面目にコメントを書いていきましょう。

****************************************************************
つい先日雪が降っていたのに、もう庭に沢山の花が咲きだしました。
花は綺麗ですけど、地面の映りがうまくないですね。 どうしたらいいかな。
c0335218_07412113.jpg


白いチューリップ
c0335218_07414935.jpg


これなんだろう。

c0335218_07421112.jpg


これ スイセンですよね。
色や形 たくさんの種類があるみたいですね。
c0335218_07430123.jpg



c0335218_07433259.jpg


c0335218_07434999.jpg


タマネギ 300本くらい植えました。 みんな元気に育っています。
向こう側はニンニクです。 去年食べられなかったものを植えておいたら育ってきました。

c0335218_07441168.jpg


長ネギ

c0335218_07482767.jpg




電子工作ランキング

にほんブログ村 その他趣味ブログ 電子工作へ
にほんブログ村

by telmic-gunma | 2019-04-17 20:37 | HP電卓 | Comments(6)

DM42で乱数を遊ぶ (2)

DM42の高速性を生かして乱数の数を増やしたら精度が上がるのか遊んでみました。
前回乱数の発生のばらつきは,サンプリング数を増やすと小さくなるようなので、
以前やったように モンテカルロ法で円周率を求めてみます。
これは x,y 二つの値を乱数でだして座標としそれが円の内部にあるか外部なのかで円周率を求めるものです。 


c0335218_10080924.jpg


全プログラムリスト 
DM42(HP42Sと同じ) 動作はUSBで電源供給なので電池の3倍速で動いています。

01 LBL "CC" **************************
02 123.4567  乱数発生器の初期値 何でもよい
03 SEED    乱数初期値セット
04 CLRG   すべての変数をゼロにする

05 LBL "DD" **************************
06 1
07 STO + 3  全体の回数 カウントアップ
08 RAN  乱数作成 X
09 X^2    2乗して01にしまう
10 STO 01
11 RAN  乱数作成 Y
12 X^2    2乗する
13 RCL 01
14 +     乱数のXとYを足す
15 1     乱数を2乗して足したものが1を超えたか "D
16 X < Y ?
17 GTO "DD"   超えていたらデータ無視して次の乱数の計算に入る。
18 1
19 STO + 04  1以内ならばDをカウントアップする
20 GTO "DD"   次の乱数の計算に戻る


測定は10分間やりました。
変数名  データー
 01  Xのランダム数
 02  未使用
 03  全体の回数  開始から1分後 54880 10分後 555760
 04  1以下の回数 開始から1分後 43129 10分後 436878

1分後円周率   (  43129 X 4 ) / 54880 = 3.14351
10分後円周率  ( 436878 X 4 ) / 555760 = 3.14436


========


乱数のサンプリング数を増やせば乱数のバラつきの比率は減る方向でしたが、乱数を使って何かやるのは、サンプリング数を増やしても精度は上がらないようですね。
乱数の使い方自体 まだ勉強する必要があるな。

HP電卓(含むDM42)でプログラムを組むのは もうゲームですね。 役立つかどうかは二の次。

****************************************************************

4月も半ば近いというのに雪景色。
自動車のタイヤ、まだ冬用のままで良かったです。

今年は、村の役を引き受けたので、なんだかんだでてんてこ舞い。
この前書いた「ジタバタ」しまくりです。
先日県議会議員の選挙で立会人を初めてやりました。
朝6時から夜7時まで投票場に缶詰になり(投票場から外に出るのは禁止されてます)
一日中 投票箱をにらんでいました。
そして次は、中学校の入学式の来賓、
まあ 端っこに座っているだけでしたがこれも初めて。
今年は、この後何があるのかな。

c0335218_10584652.jpg



c0335218_10585790.jpg




電子工作ランキング

にほんブログ村 その他趣味ブログ 電子工作へ
にほんブログ村

by telmic-gunma | 2019-04-11 10:36 | HP電卓 | Comments(4)

消費電流を測るためにDM42の内部を覗いたのでその時の写真を載せます。

c0335218_22254080.jpg


c0335218_22255602.jpg


c0335218_22260412.jpg

DM42の消費電流を測ったときの様子です。
測定機は三和計器のPC5000です。
c0335218_22261211.jpg



うわー  また雪だ
c0335218_07235924.jpg



by telmic-gunma | 2019-04-04 07:26 | HP電卓 | Comments(0)

DM42で乱数を遊ぶ

DM42になって計算が非常に高速になり、かつUSB外部電源を使用すれば、
電池の消耗を気にしないで済むというメリットがうまれました。
乱数を扱うと、どうしても計算量が大きくなりますが、今までのHP電卓の遅さに悩んでいたことが、
このDM42を使うとかなり改善されます。

c0335218_10083064.jpg

( データ 1 )
HP32Sで乱数を発生させました。
30分で約40000個 バラつきは、4%でした。

( データ 2 )
DM42(電池)で乱数を発生させました。
1分で約30000個 バラつきは、8%でした。

( データ 3 )
DM42 (USB外部電源)で乱数を発生させました。
10分で約1000000個 バラつきは、0.8%でした。


大まかに言ってサンプル数を30倍するとバラつきは 1/10になりました。
いつも思うのですが、CPUで乱数を発生させているなら、現在の状況を監視させて、乱数のバラつきを
自分で補正をかけるようにすればバラつきのない乱数が出来るはずです。
次はこの自分で補正をかけながら乱数を発生するソフトを作って見たいですね。
このDM42の高速性があればかなり面白いこと出来るとおもいます。




乱数精度のデータ ( 表示文字サイズが統一できずバラついてます)


( データ 1 )
HP32S 乱数の精度 (2017-10-31 HP電卓で遊ぶ=>パイの計算 より)

出力されたデータ (30分間測定)
変数名  データー範囲   出力回数
 A     0~1     3920
 B     1~2     3913
 C     2~3     4075
 D     3~4     3937
 E     4~5     3937
 F     5~6     3965
 G     6~7     3925
 H     7~8     4007
 I     8~9      4017
 J     9~10     3983

最大値  4075
最小値  3913
差    162

生データの合計  39677 
データの平均値  39677 / 10 = 3967.7
差 / 平均値   162 / 3867.7 = 0.040829
乱数の発生頻度のバラツキ  4.08%


**********************************************

DM42での乱数精度テストプログラム

*01 LBL "AA" ■ [PGM.FNC] LBL "AA" ENT 先頭ラベルをAAとする

*02 123.456                 乱数の種データ

*03 SEED ■ [PROB] SEED      乱数の種データを設定する
*04 CLRG ■ [CLEAR] CLRG        数値変数 00~99をクリアする

*05 LBL "BB" ■ [PGM.FNC] LBL "BB" ENT  ループ先頭ラベルをBBとする

*06 RAN ■ [PROB] RAN 乱数を出力する  0~1

*07 10                 10をセット

*08 ×                  乱数を10倍  0~ 10

*09 STO II                IIを配列ポインターとして乱数をセット

*10 1                  乱数カウンターに加算する数値

*11 STO . IND + II           ポインターで振り分けられた所に1を加算する

*12 GTO "BB"             ループの先頭 BBへ行く


注1、 STO II まだ未定義なら  STO ENT II ENT の手順で定義する。
注2、 ソフトを終了させるには 時計で時間を計り [ R/S ] を押して停止させる。


( データ 2 )

DM42(電池) 1分間

0~1 3120
1~2 3108
2~3 3182
3~4 3119
4~5 3163
5~6 3053
6~7 3094
7~8 3078
8~9 3309
9~10 3050

最大値  3309
最小値  3050
差    259

生データの合計  31276 

データの平均値計算  31276 / 10 = 3127.6

差 / 平均値   259 / 3127.6= 0.0828

乱数の発生頻度のバラツキ  8.28%



**********************************************


( データ 3 )
DM42 ( USB 外部電源 10分間 )

0~1 101804
1~2 101900
2~3 101896
3~4 102420
4~5 101843
5~6 102249
6~7 102119
7~8 102431
8~9 102341
9~10 101548

最大値  102431
最小値  101541
差    883

生データの合計  1020551 

データの平均値計算  1020551 / 10 = 102055.1

差 / 平均値   883 / 102055.1= 0.0086521

乱数の発生頻度のバラツキ  0.865%


これで終わりです。




by telmic-gunma | 2019-04-03 22:06 | HP電卓 | Comments(0)

DM42の消費電流を測定してみました。

プログラム実行時の電流が 5.3mA というのは大きいですが、動作スピードを考えればとても低いと思います。
USBから電源をもらっているときは、プログラム実行時でも電池の消費は6.7μA 一定なのは良いですね。
机のうえで使うのならば電池を気にしないでおまけに電池の3倍のスピードで使えるのですから。


測定は「三和計器」の PC5000を使いました。
c0335218_20215405.jpg


過去に測定したデータです。   「2016-11-11 HP電卓 消費電流比較してみました 」
HP15C,HP32S、HP32Sii,HP42Sなどこの時代の技術者は超真面目に仕事していたみたいです。
ブログなどで見かける「10年ぶりに出てきたので電源ONしたら動いた」というのは電源OFF時の消費電流が低いからでしょうね。

HP42S は使っているとすぐ電池が終わる感じでしたね。
c0335218_17433451.jpg



過去に測定したデータです。   「2016-12-2 HP電卓 消費電流比較してみました 2 」
HP35Sは 使いたいときは電池がない、という感じ。

c0335218_17432480.jpg


梅が咲くと急速に春が進むようですね。
まずは スイセン 綺麗ですね。   まだこれだけみたいですけれど。
黄色は大好きです、 わたしの自転車も黄色です。

c0335218_08503675.jpg


c0335218_08504405.jpg


c0335218_08505106.jpg



by telmic-gunma | 2019-03-30 08:57 | HP電卓 | Comments(2)