Lispと一緒(12) ラズパイPico2でもuLisp、算術演算、指数、対数系?

Joseph Halfmoon

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での結果が以下に。expt

引数は整数でも浮動小数でも結果が返ります。Common Lispの場合、分数を与えることもできますが、uLispでは分数を扱えないので「遠慮」しておきます。

uLispでの結果が以下に。uLispExpt

uLispでは単精度計算で、デフォルト表示小数点以下5桁です。

対数、log

log関数は、一引数で呼び出すと自然対数です。2引数で呼び出す場合、第2引数で底を指定できるので、以下の場合のように10を与えれば常用対数の計算も可能だと。まずはCommon Lisp。log

上のように、exptとlogでは浮動小数といってもフォーマットが異なるみたいです。FPUの命令を使うか使わないかの違いか?どうなんだ?

お次は uLispの場合。uLispLog

対数関数も特に波乱なし。

指数関数、exp

正確に言えば「自然対数の底」の指数関数です。expね。

Common Lispはこちら。exp

uLispでは以下に。uLispExp

ハイパボリックな関数ども、sinh、cosh、tanh

Common Lispの動作確認に、Maxima様の縁の下に隠れているCommon Lisp(SBCL)を使役しているため、一部Lisp関数がMaxima様に隠蔽されて使用できないものがあります。ハイパボリックな関数どもがそうです。そのため以下はuLispでの動作確認のみ。

まずはハイパボリック・サイン。uLispSinh

奇関数のようですな。あたりまえか。

お次はハイパボリック・コサイン。遇関数です。uLispCosh

ラストはハイパボリック・タンジェント。uLispTanh

奇関数ね。

今回練習範囲は珍しく波乱なかったね。

Lispと一緒(11) ラズパイPico2でもuLisp、算術演算、三角関数、平方根 へ戻る

Lispと一緒(13) ラズパイPico2でもuLisp、乱数、最大最小、丸め系? へ進む