|
> No.1659[元記事へ]
a^bは2変数関数です。
bが有理数の場合だけ定義すればよいものとすれば,bを既約分数で表して分母が奇数の場合だけaが負数であることを許す定義も可能ですが,そこから展開される数学は奇怪なものとなります。
bを実数の範囲にまで拡張しようと考えると,a^b=exp(b*log(a))で定義するのが自然ですが,aが負数のときのlog(a)は虚数で,多値となり,BASICの組込関数として用意しようとする場合にはどれを関数値として定めるべきか悩みます。
十進BASICの複素数モードで次のプログラムの10行に示すようなpower関数を定義してみると,おそらくお望みの答えとは違う値が得られると思います。
10 OPTION ARITHMETIC complex
20 DEF power(a,b)=EXP(b*LOG(a))
30 PRINT power(2,5)
40 PRINT power(-2,5)
50 PRINT power(8,1/3)
60 PRINT power(-8,1/3)
70 END
2変数関数のa^bでなく,1変数関数の立方根関数がほしいのであれば,近似値でよければ,
10 DEF CubRoot(x)=SGN(x)*ABS(x)^(1/3)
20 PRINT CubRoot(8),CubRoot(-8)
30 PRINT CubRoot(27),CubRoot(-27)
40 END
で求められます。(誤差が生じる理由は,以下を参照)
正確な値を求めたいのであれば,ニュートン法を利用して立方根関数を定義してください。
|
|