SSブログ

PCプログラミングで厳密計算と暗算用略算比較(長さん)

既に述べたように、将棋駒の走りを拡張した、
アナログ全方向走りで、「途中に駒が有る場合」
の途中駒を、隣接1升目離れで視半径45°
(-δ;δ→0)の排除半径を持つ駒と定義し、
中心方位角と排除視半径を暗算で出来る程度に、
計算を近似式化し、それによって方位角範囲(上
端と下端)計算を簡略すると、厳密に三角関数や
ピタゴラスの定理を用いた場合と、合わない場合
が発生した。
 特に、視半径を0の1/1の0で45°、
1の1で30°、それ以遠で42°/距離で
逆比例と近似暗算計算し、方位角はarcTan
計算を数表を用いず、
0~ほぼ0.44未満まで、55×正弦°
0.44以上~0.8未満まで42×正弦+5.5°、
0.8から1まで30×正弦+15°と
折れ線近似をして、方位角範囲(上端と下端)計算
をすると、3の0の上限よりも7の1の上限が、
前記暗算用暗算計算では、小さく出るが、厳密
に数表を使って計算すると、7の1の上限よりも
3の0の上限の方が小さく、直射して合法になる
という逆転が起こり、禁手を過剰に恐れすぎの
「ぼんやり者間違い計算」として問題になった。
 他には「途中に1駒ある場合」の逆転は、無さ
そうであったが、気になる為、今回は、煩雑さも
あって、PCでプログラミングして、方位角計算
で、暗算用略算だと順位が逆転する箇所を全抽出
してみた。
 以下は、以前に問題にした方位角45°の場合
の、穴を構成する駒への「全当たり」の問題を
除く、片側方位角43°付近までの、全ケースの
方位角計算の、暗算用略算と、三角関数やピタゴ
ラスの定理を用いた厳格計算の、比較プログラミ
ング例である。以下は個人的に、私には作成楽な、
いわゆるPCプログラム:日本電気㈱の昔流行の、
N88Basic(互換)で書いている。
100 CLS
200 OPEN "TEST.TXT" FOR OUTPUT AS #1
1000 OPTION BASE 0
1020 RADOODO=57.2957795
1040 HANKEI=1/SQR(2)
1100 DIM ARCGEN(8,8,2):DIM ARCRYAK(8,8,2)
1120 DIM GYO(8):DIM RETU(8)
1200 FOR I=0 TO 8:GYO(I)=I:RETU(I)=I:NEXT I
1300 DIM ARCNA$(8,8,4)
1320 DIM ARCGENL(144): DIM ARCGENN$(144):DIM ARCRYAKL(144):DIM ARCRYAKN$(144)
1400 FOR I=0 TO 8
1500 FOR J=0 TO 8
1600 ARCNA$(I,J,1)=STR$(GYO(I))+" "+STR$(RETU(J))+" 計下"
1700 ARCNA$(I,J,2)=STR$(GYO(I))+" "+STR$(RETU(J))+" 計上"
1800 ARCNA$(I,J,3)=STR$(GYO(I))+" "+STR$(RETU(J))+" 厳下"
1900 ARCNA$(I,J,4)=STR$(GYO(I))+" "+STR$(RETU(J))+" 厳上"
2000 NEXT J
2100 NEXT I
2900 '
2920 ARCRYAK(0,0,1)=225:ARCRYAK(0,0,2)=225
3000 FOR I=1 TO 8
3100 FOR J=0 TO 8
3200 IF J/I<0.44 THEN TYU=55*J/I:GOTO 4000
3300 IF (J/I>=0.44 AND J/I<0.8) THEN TYU=42*J/I+5.5:GOTO 4000
3400 IF (J/I>=0.8 AND J/I<=1) THEN TYU=30*J/I+15:GOTO 4000
3500 IF (I/J>=0.8 AND I/J<1) THEN TYU=90-(30*I/J+15):GOTO 4000
3600 IF (I/J>=0.44 AND I/J<0.8) THEN TYU=90-(42*I/J+5.5):GOTO 4000
3700 IF I/J<0.44 THEN TYU=90-(55*I/J):GOTO 4000
4000 '
4100 HAIJO=42/SQR(I*I+J*J)
4200 IF I=1 AND J=0 THEN HAIJO=45
4300 IF I=1 AND J=1 THEN HAIJO=30
4400 ARCRYAK(I,J,1)=TYU-HAIJO
4500 ARCRYAK(I,J,2)=TYU+HAIJO
4800 NEXT J
4900 NEXT I
5000 '
5002 CONT%=0
5100 FOR I=1 TO 8:FOR J=0 TO 8:FOR K=1 TO 2
5200 CONT%=CONT%+1
5300 ARCRYAKL(CONT%)=ARCRYAK(I,J,K)
5400 ARCRYAKN$(CONT%)=ARCNA$(I,J,K)
5500 NEXT K:NEXT J:NEXT I
5600 '
5700 FOR I=1 TO 8
5800 FOR J=0 TO 8
5820 TYU=RADOODO*ATN(J/I)
5900 HAIJO=RADOODO*ATN(HANKEI/SQR(I*I+J*J-0.5))
6000 ARCGEN(I,J,1)=TYU-HAIJO
6100 ARCGEN(I,J,2)=TYU+HAIJO
6200 NEXT J
6300 NEXT I
6400 '
7100 CONT%=0
7200 FOR I=1 TO 8:FOR J=0 TO 8:FOR K=1 TO 2
7300 CONT%=CONT%+1
7400 ARCGENL(CONT%)=ARCGEN(I,J,K)
7500 ARCGENN$(CONT%)=ARCNA$(I,J,K+2)
7600 NEXT K:NEXT J:NEXT I
7700 CONT%=0
7900 '
8000 FOR I=1 TO 143
8100 FOR J=I+1 TO 144
8200 IF ARCRYAKL(I)>ARCRYAKL(J) THEN SWAP ARCRYAKL(I),ARCRYAKL(J):SWAP ARCRYAKN$(I),ARCRYAKN$(J)
8400 IF ARCGENL(I)>ARCGENL(J) THEN SWAP ARCGENL(I),ARCGENL(J):SWAP ARCGENN$(I),ARCGENN$(J)
8600 NEXT J
8700 NEXT I
9000 '
9100 FOR I=1 TO 72
9200 PRINT #1, USING "##;& &;####.######;& &;####.#####";I,ARCRYAKN$(I),ARCRYAKL(I),ARCGENN$(I),ARCGENL(I)
9300 NEXT I
9320 CLOSE #1
9400 END
 実行させると次のように答えが出るので、問題点
をタイピングして、抽出している。
なお以下は1行毎に、”順位、升目、限界角種類、方位角計算結果、
升目、限界角種類、方位角計算結果”を示している。
1; 1 0 計下 ; -45.000000; 1 0 厳下 ; -45.00000
2; 2 0 計下 ; -21.000000; 2 0 厳下 ; -20.70481
3; 3 0 計下 ; -14.000000; 3 0 厳下 ; -13.63302
4; 4 0 計下 ; -10.500000; 4 0 厳下 ; -10.18207
5; 5 0 計下 ; -8.400000; 5 0 厳下 ; -8.13010
6; 6 0 計下 ; -7.000000; 6 0 厳下 ; -6.76810
7; 7 0 計下 ; -6.000000; 7 0 厳下 ; -5.79764
8; 8 0 計下 ; -5.250000; 8 0 厳下 ; -5.07090
9; 8 1 計下 ; 1.665541; 8 1 厳下 ; 2.09338
10; 7 1 計下 ; 1.917446; 7 1 厳下 ; 2.39093
11; 6 1 計下 ; 2.261909; 6 1 厳下 ; 2.78673
12; 5 1 計下 ; 2.763122; 5 1 厳下 ; 3.33875
13; 4 1 計下 ; 3.563504; 4 1 厳下 ; 4.16128
14; 3 1 計下 ; 5.051767; 8 0 厳上 ; 5.07090
15; 8 0 計上 ; 5.250000; 3 1 厳下 ; 5.51398
16; 7 0 計上 ; 6.000000; 7 0 厳上 ; 5.79764
17; 6 0 計上 ; 7.000000; 6 0 厳上 ; 6.76810
18; 2 1 計下 ; 7.717029; 5 0 厳上 ; 8.13010←要注意
19; 5 0 計上 ; 8.400000; 2 1 厳下 ; 8.13010←
20; 8 2 計下 ; 8.656752; 8 2 厳下 ; 9.11713
21; 7 2 計下 ; 9.945142; 4 0 厳上 ; 10.18207←問題なし
22; 4 0 計上 ; 10.500000; 7 2 厳下 ; 10.37155←
23; 6 2 計下 ; 11.692550; 6 2 厳下 ; 12.01566
24; 8 1 計上 ; 12.084459; 8 1 厳上 ; 12.15665
25; 7 1 計上 ; 13.796840; 3 0 厳上 ; 13.63302←議論済
26; 3 0 計上 ; 14.000000; 7 1 厳上 ; 13.86927←
27; 5 2 計下 ; 14.200796; 5 2 厳下 ; 14.25632
28; 1 1 計下 ; 15.000000; 1 1 厳下 ; 15.00000
29; 8 3 計下 ; 15.709272; 8 3 厳下 ; 15.80878
30; 6 1 計上 ; 16.071424; 6 1 厳上 ; 16.13791
31; 4 2 計下 ; 17.108514; 4 2 厳下 ; 17.46762
32; 7 3 計下 ; 18.056558; 7 3 厳下 ; 17.87114
33; 8 2 計上 ; 18.843248; 8 2 厳上 ; 18.95536
34; 5 1 計上 ; 19.236878; 5 1 厳上 ; 19.28112
35; 6 3 計下 ; 20.239010; 6 3 厳下 ; 20.51431
36; 2 0 計上 ; 21.000000; 2 0 厳上 ; 20.70481
37; 7 2 計上 ; 21.483429; 7 2 厳上 ; 21.51924
38; 8 4 計下 ; 21.804257; 8 4 厳下 ; 22.03069
39; 3 2 計下 ; 21.851296; 3 2 厳下 ; 22.38014
40; 5 3 計下 ; 23.497059; 4 1 厳上 ; 23.91120←問題なし
41; 4 1 計上 ; 23.936496; 5 3 厳下 ; 23.99848←
42; 7 4 計下 ; 24.290541; 7 4 厳下 ; 24.71324
43; 6 2 計上 ; 24.974116; 6 2 厳上 ; 24.85423
44; 8 3 計上 ; 25.540728; 8 3 厳上 ; 25.30331
45; 8 5 計下 ; 27.298009; 8 5 厳下 ; 27.70685
46; 6 4 計下 ; 27.675648; 6 4 厳下 ; 28.06271
47; 4 3 計下 ; 28.600000; 7 3 厳上 ; 28.52604←問題なし
48; 7 3 計上 ; 29.086299; 4 3 厳下 ; 28.73980←
49; 5 2 計上 ; 29.799204; 5 2 厳上 ; 29.34650
50; 2 2 計下 ; 30.150758; 2 2 厳下 ; 30.52249
51; 7 5 計下 ; 30.617599; 7 5 厳下 ; 30.82267
52; 8 4 計上 ; 31.195743; 8 4 厳上 ; 31.09941
53; 3 1 計上 ; 31.614900; 3 1 厳上 ; 31.35592
54; 5 4 計下 ; 32.440702; 5 4 厳下 ; 32.31962
55; 6 3 計上 ; 32.760990; 6 3 厳上 ; 32.61580
56; 8 6 計下 ; 32.800000; 8 6 厳下 ; 32.81509
57; 6 5 計下 ; 34.622451; 6 5 厳下 ; 34.61114
58; 7 4 計上 ; 34.709459; 7 4 厳上 ; 34.77652
59; 3 3 計下 ; 35.100505; 3 3 厳下 ; 35.40593
60; 4 2 計上 ; 35.891486; 4 2 厳上 ; 35.66249
61; 7 6 計下 ; 36.158746; 7 6 厳下 ; 36.20259
62; 8 5 計上 ; 36.201991; 8 5 厳上 ; 36.30391
63; 8 7 計下 ; 37.298972; 8 7 厳下 ; 37.37185
64; 4 4 計下 ; 37.575379; 4 4 厳下 ; 37.81924
65; 5 3 計上 ; 37.902941; 5 3 厳上 ; 37.92903
66; 5 5 計下 ; 39.060303; 5 5 厳下 ; 39.26083
67; 6 4 計上 ; 39.324352; 6 4 厳上 ; 39.31742
68; 6 6 計下 ; 40.050253; 6 6 厳下 ; 40.21981
69; 7 5 計上 ; 40.382401; 7 5 厳上 ; 40.25268
70; 7 7 計下 ; 40.757359; 7 7 厳下 ; 40.90396
71; 8 6 計上 ; 41.200000; 8 6 厳上 ; 40.92470
72; 8 8 計下 ; 41.287689; 8 8 厳下 ; 41.41668

 上記の結果リストから判るように、9×9升目
盤では所詮、チェックが必要な方位角計算は、
事実上この、72通りしか無いのである。
 そして、右隅のコメントのように

暗算の為の略計算では5箇所、厳密計算
との間に、違いが生じている。

ただし、途中駒がターゲット駒を隠すというカテ
ゴリーの間違いは冒頭で紹介した「7の1の上限
よりも3の0の上限の方が小さい」という1箇所
だけである。
 残りの4箇所は、厳密計算では角道状の穴から、
向こうの駒を突きぬいて取れるのに、略算すると、
穴が無くなるという「角道類似型間違い」だけ
である。排除円の半径を、遠方で過大に見ている
のが、差異が生じる主原因だと私は解釈する。
 そのうち以下説明するケースを除く3つは、私
には将棋盤を見ても、にわかにはピンと来ない
ケースである。例えば上記のリストで40と41
の逆転については「略算だと、そういうものか」
と私なら諦める例か?

これらは、間違っていても略算結果が正しいとし
て非合法にしてしまって、問題無いのではないか

と疑われるという意味である。
 残りの一つで、上記で要注意とした一番上のケー
スというのは、
初期位置の5八位置に、超奔王が最初居るとして、
超奔王先の歩兵は突き捨てる位置5四に居て、盤
面には、自陣の金将前と超奔王前の3歩だけ有っ
て残りの15個の歩兵は無いとしたときに、以前
述べたように、超奔王位置から、相手陣両金将位
置の駒はその場合にも直射するのだが、仮に味方
の玉将が、別の位置に移動済みで、一歩超奔王自
身が後退して

▲5九超奔王としても、味方の金将前3段目両歩
兵と、味方の5四位値の、突き捨て歩兵の2枚組
「途中の駒」の間に、無限小の大きさの角道型穴
が空いていて、相手陣の両金将位置駒を、その無
限小の大きさの穴で突き刺せる

のではいかと、例示されるようなケースである。
 厳密計算結果は、私は大学受験のときチェック
漏れしたが、2円の共通外接線の傾きが特定の場
合のケースであるらしく、5九の奔王位置から、
共通外接線光路で、相手陣金将位置の駒が無限小
の角度で覗いているらしい。
 このケースは、超奔王を1歩後退しても、相手
金将位置駒が取れるというルールが「小気味良い」
感じなので、厳密計算と無限小の次数解析(この
場合も同次の無限小だとみられる)で、いっけん

厳密計算を採用したくもなる、例外

のようにも感じる。
 特に、相手が幾何学が強い棋士なら、突っ込み
が入るかもしれない。継続して、議論すべきかと
思う。
 上記のNo.18と19の、2の1と5の0で、
無限小の穴を作る例だけ、そのうち円の共通接線
の幾何学で、チェックしてみようと私は考えた。
(2023/10/28)

nice!(9)  コメント(0) 
共通テーマ:趣味・カルチャー