2014.11.25

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

MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!


[第71回]


●倍精度実数演算プログラムの組込み(4)

前回はTANはまだだめですと書きましたが、本日も引き続いて努力しました結果、倍精度のTAN関数もMYCPU80に組み込むことができました。

    10 FOR A#=0 TO 85 STEP 5
    20 PRINT A#,TAN(A#*PI#/180)
    30 NEXT A#
    40 PRINT "end"
>r.
 0            0
 5            0.8748866352592399D-1
 10           0.176326980708465
 15           0.2679491924311227
 20           0.3639702342662023
 25           0.4663076581549985
 30           0.5773502691896257
 35           0.7002075382097097
 40           0.8390996311772799
 45           0.9999999999999998
 50           1.19175359259421
 55           1.428148006742114
 60           1.732050807568877
 65           2.144506920509558
 70           2.747477419454622
 75           3.732050807568877
 80           5.671281819617709
 85           11.43005230276134
end

SIN関数とCOS関数は置数をラジアンで与えるSIN()、COS()のほかに、度で与えるSID()、COD()が用意されていますが、TANについてはラジアンのみです。
度でTANを求めたいときはπ/180を乗じてラジアンに変換してからTAN()の置数にします。

前回のSID()、COD()と同様に末尾の1桁に誤差が出ています。
おや、TAN45°はちょっと気持ち悪いですね。
いくらなんでもTAN45°がこれでは目立ちますので、このままにしておくはずはないのですが…。

ひょっとするとここかも知れません。
20行を直してみました。

>.
    10 FOR A#=0 TO 85 STEP 5
    20 PRINT A#,TAN(A#*PI#/180)
    30 NEXT A#
    40 PRINT "end"
>    20 PRINT A#,TAN(A#*PI#/180#)
>r.
 0            0
 5            0.8748866352592399D-1
 10           0.176326980708465
 15           0.2679491924311227
 20           0.3639702342662023
 25           0.4663076581549985
 30           0.5773502691896257
 35           0.7002075382097097
 40           0.8390996311772799
 45           1
 50           1.19175359259421
 55           1.428148006742114
 60           1.732050807568877
 65           2.144506920509558
 70           2.747477419454622
 75           3.732050807568877
 80           5.671281819617709
 85           11.43005230276134
end

おお。ビンゴでありました。

逆正接関数ATN()も組込みましたのでTAN()と一緒にテストしました。

    10 PRINT "TAN & ATN TEST"
    20 FOR A#=0 TO 85 STEP 5
    30 R#=A#*PI#/180#
    40 T#=TAN(R#)
    50 AA#=ATN(T#)/PI#*180#
    60 PRINT "A#=";A#,"TAN(A#)=";T#,"  ATN(#)=";AA#
    70 NEXT A#
    80 PRINT "END"
>r.
TAN & ATN TEST
A#=0         TAN(A#)=0      ATN(#)=0
A#=5         TAN(A#)=0.8748866352592399D-1            ATN(#)=5
A#=10        TAN(A#)=0.176326980708465   ATN(#)=10
A#=15        TAN(A#)=0.2679491924311227  ATN(#)=15
A#=20        TAN(A#)=0.3639702342662023  ATN(#)=20
A#=25        TAN(A#)=0.4663076581549985  ATN(#)=25
A#=30        TAN(A#)=0.5773502691896257  ATN(#)=30
A#=35        TAN(A#)=0.7002075382097097  ATN(#)=35
A#=40        TAN(A#)=0.8390996311772799  ATN(#)=40
A#=45        TAN(A#)=1      ATN(#)=45
A#=50        TAN(A#)=1.19175359259421    ATN(#)=50
A#=55        TAN(A#)=1.428148006742114   ATN(#)=55
A#=60        TAN(A#)=1.732050807568877   ATN(#)=60
A#=65        TAN(A#)=2.144506920509558   ATN(#)=65
A#=70        TAN(A#)=2.747477419454622   ATN(#)=70
A#=75        TAN(A#)=3.732050807568877   ATN(#)=75
A#=80        TAN(A#)=5.671281819617709   ATN(#)=80
A#=85        TAN(A#)=11.43005230276134   ATN(#)=85
END

前回も書きましたが、この計算も汎用ロジックICだけでやっているのですよ。
ちょいと自慢したい気分です。

かなり難航していましたが倍精度の浮動小数点演算プログラムの組込み作業もやっと峠を越えるところまで来たようです。
あと一息です。

MYCPU80でCP/Mを![第71回]
2014.11.25upload

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