Common Lispの系譜を継ぐマイコン上のuLispをラズパイPico2上で練習中です。uLispにおいては浮動小数点数は extensions という位置づけですが、FPUを備えているPico2にはなんでもありません?前回は三角関数など練習。今回は指数、対数系です。今回は平穏無事な感じ。目くじらたてることもなし。
※Lispと一緒 投稿順 index はこちら
※実機確認は Raspberry Pi Pico2で行ってます。
※使用させていただいとります uLisp のバージョンは 4.6b (Arm用)です。
※uLispとCommon Lispとの動作比較のために使わせていただいている処理系は以下です。
SBCL 2.2.2 (SBCL = Steel Bank Common Lisp )
今回練習の関数ども
以下の6関数を練習してみます。
-
- べき乗、expt
- 対数、log
- 自然対数の底の指数関数、exp
- ハイパボリック・サイン、sinh
- ハイパボリック・コサイン、cosh
- ハイパボリック・タンジェント、tanh
使用しているCommon Lisp処理系とuLisp処理系で計算精度が異なりますが、双方とも「浮動小数」で解を得てます。
べき乗、expt
exptの第1引数が底、第2引数が指数です。Common Lispでの結果が以下に。
引数は整数でも浮動小数でも結果が返ります。Common Lispの場合、分数を与えることもできますが、uLispでは分数を扱えないので「遠慮」しておきます。
uLispでは単精度計算で、デフォルト表示小数点以下5桁です。
対数、log
log関数は、一引数で呼び出すと自然対数です。2引数で呼び出す場合、第2引数で底を指定できるので、以下の場合のように10を与えれば常用対数の計算も可能だと。まずはCommon Lisp。
上のように、exptとlogでは浮動小数といってもフォーマットが異なるみたいです。FPUの命令を使うか使わないかの違いか?どうなんだ?
対数関数も特に波乱なし。
指数関数、exp
正確に言えば「自然対数の底」の指数関数です。expね。
ハイパボリックな関数ども、sinh、cosh、tanh
Common Lispの動作確認に、Maxima様の縁の下に隠れているCommon Lisp(SBCL)を使役しているため、一部Lisp関数がMaxima様に隠蔽されて使用できないものがあります。ハイパボリックな関数どもがそうです。そのため以下はuLispでの動作確認のみ。
奇関数のようですな。あたりまえか。
奇関数ね。
今回練習範囲は珍しく波乱なかったね。