2014.11.26

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

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


[第72回]


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

前回に続いて倍精度関数演算プログラムの組込み作業の結果報告です。
指数関数EXP()と自然対数LN()を組み込みました。

    10 PRINT "EXP & LN TEST"
    20 FOR A#=-5# TO 5# STEP 0.5#
    30 E#=EXP(A#)
    40 L#=LN(E#)
    60 PRINT "A#=";A#,"EXP(A#)=";E#,"  LN(E#)=";L#
    70 NEXT A#
    80 PRINT "END"
data end
>r.
EXP & LN TEST
A#=-5        EXP(A#)=0.6737946999085466D-2            LN(E#)=-5
A#=-4.5      EXP(A#)=0.1110899653824231D-1            LN(E#)=-4.5
A#=-4        EXP(A#)=0.1831563888873418D-1            LN(E#)=-4
A#=-3.5      EXP(A#)=0.0301973834223185  LN(E#)=-3.5
A#=-3        EXP(A#)=0.4978706836786395D-1            LN(E#)=-3
A#=-2.5      EXP(A#)=0.8208499862389879D-1            LN(E#)=-2.5
A#=-2        EXP(A#)=0.1353352832366127  LN(E#)=-2
A#=-1.5      EXP(A#)=0.2231301601484298  LN(E#)=-1.5
A#=-1        EXP(A#)=0.3678794411714423  LN(E#)=-1
A#=-0.5      EXP(A#)=0.6065306597126334  LN(E#)=-0.5
A#=0         EXP(A#)=1      LN(E#)=0
A#=0.5       EXP(A#)=1.648721270700128   LN(E#)=0.4999999999999999
A#=1         EXP(A#)=2.718281828459045   LN(E#)=0.9999999999999999
A#=1.5       EXP(A#)=4.481689070338065   LN(E#)=1.5
A#=2         EXP(A#)=7.38905609893065    LN(E#)=2
A#=2.5       EXP(A#)=12.18249396070347   LN(E#)=2.5
A#=3         EXP(A#)=20.08553692318767   LN(E#)=3
A#=3.5       EXP(A#)=33.11545195869232   LN(E#)=3.5
A#=4         EXP(A#)=54.59815003314424   LN(E#)=4
A#=4.5       EXP(A#)=90.01713130052182   LN(E#)=4.5
A#=5         EXP(A#)=148.4131591025766   LN(E#)=5
END

やっぱり最後の1桁に誤差が出ています。
なんとかしたいところです。

こちらは累乗と常用対数LOG()です。

    10 PRINT "10^N & LOG TEST"
    20 FOR A#=-5# TO 5# STEP 0.5#
    30 E#=10# ^A#
    40 L#=LOG(E#)
    60 PRINT "A#=";A#,"10#^A#=";E#," LOG(E#)=";L#
    70 NEXT A#
    80 PRINT "END"
data end
>r.
10^N & LOG TEST
A#=-5        10#^A#=0.9999999999999997D-5            LOG(E#)=-5
A#=-4.5      10#^A#=0.3162277660168379D-4            LOG(E#)=-4.5
A#=-4        10#^A#=0.9999999999999998D-4            LOG(E#)=-3.999999999999999
A#=-3.5      10#^A#=0.3162277660168379D-3            LOG(E#)=-3.5
A#=-3        10#^A#=0.001  LOG(E#)=-3
A#=-2.5      10#^A#=0.3162277660168379D-2            LOG(E#)=-2.5
A#=-2        10#^A#=0.01   LOG(E#)=-2
A#=-1.5      10#^A#=0.0316227766016838  LOG(E#)=-1.5
A#=-1        10#^A#=0.1    LOG(E#)=-0.9999999999999999
A#=-0.5      10#^A#=0.3162277660168379  LOG(E#)=-0.5
A#=0         10#^A#=1      LOG(E#)=0
A#=0.5       10#^A#=3.162277660168379   LOG(E#)=0.5
A#=1         10#^A#=10     LOG(E#)=0.9999999999999999
A#=1.5       10#^A#=31.62277660168379   LOG(E#)=1.5
A#=2         10#^A#=100    LOG(E#)=2
A#=2.5       10#^A#=316.227766016838    LOG(E#)=2.5
A#=3         10#^A#=999.9999999999999   LOG(E#)=3
A#=3.5       10#^A#=3162.277660168379   LOG(E#)=3.5
A#=4         10#^A#=10000  LOG(E#)=4
A#=4.5       10#^A#=31622.7766016838    LOG(E#)=4.5
A#=5         10#^A#=100000 LOG(E#)=5
END

うーん。
やっぱり最後の1桁が、もうちょいというところですねえ。
これはなんとか最良近似式を算出して改良したいところです。

それはともかくとしまして、やっとここまできました。
これで倍精度実数演算プログラムの組込み作業の一応の完成です。
いやあ。
苦しかった、です。

でも、これで組込み作業は終わりではありません。
まだまだやらねばならぬことは残っています。
なかなかにしんどいことです。

MYCPU80でCP/Mを![第72回]
2014.11.26upload

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