2018.7.1
前へ
次へ
ホームページトップへ戻る


16ビットマイコンボードの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
いつか使ってみるつもりで入手してそのまま置いてあった16ビットCPUのことを思い出しました。
AMD社のAM188です。
その名の通り、CPUコアは80188互換の16ビットCPUです。
そのAM188を使った16ビットマイコンボードの製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第46回]



●倍精度SIN、COS、TAN

前回は倍精度SIN関数のバグをおよそ12時間の格闘の末にやっと退治したところまでを書きました。
やっとSIN関数そのもののバグは退治できたのですが、小さな値の倍精度数を10進表記で表示すると整数で表示されてしまうというバグが退治できずに残りました。
そのバグは翌日になってから退治しましたが、その過程については冗長になりますので省略いたします。
とにかく倍精度SIN関数については無事に正しく実行されるようになりました。
それで。
SINがうまくいったということになりますと、やっぱりCOSとTANも試してみなければいけませんでしょう。
ということで、今度はSINだけではなくて、COSとTANも一緒にテストしてみました。


画面右側はND80Z3.5で同じテストプログラムを実行させたログです。
最初の列はSINです。
ここは前日にバグをつぶしましたので、Z80での結果と一致しています。
30度のときの結果がきっちり0.5になっていませんが、これはわずかな計算誤差ですから、末尾を四捨五入すれば正しく表示されるようになります。
おや。
COSもうまくいったと思ったのですが、85度と90度の結果がちょっとおかしいようです。

やっぱりバグがみつかりました。
プログラムを修正したところ、85度も90度も正しく計算されるようになりました。


残るはTANです。
ちょっと見には正しいように見えますが、よくよく見ると下位桁の数桁が違っています。
ここにもバグがあるようです。
なんだかため息が出てきてしまいます。

やっと。
TANもまともに計算されるようになりました。



参考までに。
上の画面では前の方の表示がスクロールしてしまって見えませんので、その部分のログを下に示します。

    10 PRINT "degree,radian"
    20 FOR A=0 TO 18
    30 A#=A*PI#/36
    40 PRINT A*5;"  ";A#
    50 NEXT A
    60 PRINT 
    70 PRINT "degree,sin,cos,tan"
    80 FOR A=0 TO 18
    90 A#=A*PI#/36
   100 PRINT A*5;"  ";SIN(A#),COS(A#),
   110 IF A<18 THEN PRINT TAN(A#)ELSE PRINT "-"
   120 NEXT A
>r.
degree,radian
0  0
5  0.8726646259971647D-1
10  0.1745329251994329
15  0.2617993877991494
20  0.3490658503988659
25  0.4363323129985823
30  0.5235987755982988
35  0.6108652381980153
40  0.6981317007977317
45  0.7853981633974482
50  0.8726646259971647
55  0.9599310885968812
60  1.047197551196598
65  1.134464013796314
70  1.221730476396031
75  1.308996938995747
80  1.396263401595463
85  1.48352986419518
90  1.570796326794896

degree,sin,cos,tan
0  0         1            0
5  0.8715574274765816D-1  0.9961946980917456        0.8748866352592398D-1
10  0.1736481776669303    0.984807753012208         0.1763269807084649
15  0.2588190451025207    0.9659258262890682        0.2679491924311227
20  0.3420201433256687    0.9396926207859084        0.3639702342662023
25  0.4226182617406994    0.90630778703665          0.4663076581549985
30  0.5      0.8660254037844386        0.5773502691896257
35  0.573576436351046     0.8191520442889918        0.7002075382097097
40  0.6427876096865393    0.766044443118978         0.8390996311772799
45  0.7071067811865475    0.7071067811865475        0.9999999999999999
50  0.7660444431189779    0.6427876096865394        1.19175359259421
55  0.8191520442889917    0.5735764363510461        1.428148006742114
60  0.8660254037844386    0.5          1.732050807568877
65  0.9063077870366499    0.4226182617406995        2.144506920509558
70  0.9396926207859083    0.3420201433256688        2.747477419454622
75  0.9659258262890682    0.2588190451025208        3.732050807568876
80  0.984807753012208     0.1736481776669305        5.671281819617705
85  0.9961946980917455    0.8715574274765829D-1     11.43005230276133
90  1        0            -


16ビットマイコンボードの製作[第46回]
2018.7.1upload

前へ
次へ
ホームページトップへ戻る