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
前へ
次へ
ホームページトップへ戻る