ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます
当記事は2009年11月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 2011.7.1
前へ
次へ
目次へ戻る
ホームページトップへ戻る
☆ND80ZVでBASICを(2)
ND80ZVに搭載予定のBASICはハンパではありません。
浮動小数点演算をこなし、さらに三角関数、対数計算までできるのです。
しかも、倍精度での演算もできてしまいます。

[第70回]

●指数関数EXP()

前回は常用対数LOG()と自然対数LN()について説明をいたしました。
自然対数ということになりますと、指数関数についてはどうなのか、ということになると思います。

ええ。
もちろん。
指数関数EXP()も使えますですよお。
EXP()はeを底とした指数eの関数です。

なおe以外の指数計算については、[第60回]で累乗(ベキ乗)の機能として説明をいたしました。
たとえば
a=x
でしたらべき乗の記号 ^ を使って、
A=X^Y
のように使います。

さて、ではEXP()のサンプルプログラムです。

>list
    10 FOR A=1 TO 10
    20 PRINT A,EXP(A)
    30 NEXT A
>run
1            2.71828
2            7.38906
3            20.0855
4            54.5982
5            148.413
6            403.429
7            1096.63
8            2980.96
9            8103.09
10           22026.5

前回のサンプルプログラムと同様に、FOR NEXTを使って1〜10までのEXP()を計算させています。
つまりe〜e10の計算です。
e≒2.71828ですから、Windowsの関数電卓を使って、たとえば2.71828[x^y]10[=]と操作すれば、EXP(10)を求めることができます。
なお、Windowsの関数電卓の[Exp]キーは指数関数eではありませんから、10[Exp]と操作してもEXP(10)を求めることはできません。

LOG()やLN()と同じようにEXP()もEXCELで計算させることができるようです。
でも、今回のEXP()についてはEXCELで比較しなくても、別の方法で、上で求めたEXP()の結果を確認することができます。

もうおわかりの方も多いと思います。
そうです。
前回説明をしました自然対数LN()を使えばよいのです。

a=LN(x)は、
a=logxですから
つまりx=eということです。
したがって、上のサンプルプログラムで求めたxを、前回説明しました自然対数LN()に与えれば、元のaの値が返ってくるはずです。

そのようにプログラムを直して(追加して)試してみましょう。

>15e=exp(a)
>    20 PRINT A,E,ln(e)
>list
    10 FOR A=1 TO 10
    15 E=EXP(A)
    20 PRINT A,E,LN(E)
    30 NEXT A
>ren
>list
    10 FOR A=1 TO 10
    20 E=EXP(A)
    30 PRINT A,E,LN(E)
    40 NEXT A
>run
1            2.71828      1
2            7.38906      2
3            20.0855      3
4            54.5982      4
5            148.413      5
6            403.429      6
7            1096.63      7
8            2980.96      8
9            8103.09      9
10           22026.5      10

EXP()の結果の値EをLN()に与えたところ、もとの値Aが得られました。
ということは、ここで計算したEXP()の値は正しい、ということです。

さて、では、同じことを、倍精度実数計算でもやってみましょう。

>list
    10 FOR A#=1 TO 10
    20 E#=EXP(A#)
    30 PRINT A#,E#,LN(E#)
    40 NEXT A#
>run
1            2.718281828459045         0.9999999999999999
2            7.38905609893065          2
3            20.08553692318767         3
4            54.59815003314424         4
5            148.4131591025766         5
6            403.4287934927351         6
7            1096.633158428459         7
8            2980.957987041729         8
9            8103.083927575385         9
10           22026.46579480672         10

う。
また、ちょいと誤差が見えてしまいました。
少しばかり見苦しいので、ちょっと補正をすることにいたします。

>list
    10 FOR A#=1 TO 10
    20 E#=EXP(A#),L#=LN(E#)
    30 IF A#=1 L#=L#+0.1D-15
    40 PRINT A#,E#,L#
    50 NEXT A#
>run
1            2.718281828459045         1
2            7.38905609893065          2
3            20.08553692318767         3
4            54.59815003314424         4
5            148.4131591025766         5
6            403.4287934927351         6
7            1096.633158428459         7
8            2980.957987041729         8
9            8103.083927575385         9
10           22026.46579480672         10

これで、表示がすっきりしました。
CPUをつくろう!第555回(2010.7.17upload)を再編集

ワンボードマイコンをつくろう![第70回]
2011.7.1upload

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