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

Joseph Halfmoon

Common Lispの系譜を継ぐマイコン上のuLispをラズパイPico2上で練習中。前回は算術演算を練習するのに浮動小数点数使ってしまいました。しかし、uLispにおいては浮動小数点数は extensions という位置づけです。ターゲットマイコンによっては使えない機種もあり。Common Lispとの差異もあり。

※Lispと一緒 投稿順 index はこちら

※実機確認は Raspberry Pi Pico2で行ってます。

※使用させていただいとります uLisp のバージョンは 4.6b (Arm用)です。

※uLispとCommon Lispとの動作比較のために使わせていただいている処理系は以下です。

SBCL 2.2.2  (SBCL =  Steel Bank Common Lisp )

πはどこへ行った?

Common Lisp上であれば、PIというお名前の定数あり。それを呼び出せば円周率が返ってまいります。しかし、浮動小数の存在すらオプショナルな uLisp(ターゲットマシンのPico2の場合、Arm Cortex-M33を頭に頂いているので浮動小数の計算に問題ありません)では、どうも「ありがちな」数学定数などは定義されていないようです?老人は見つけることができませなんだ。uLisp_pi

そこで、アークタンジェントを呼び出してパイ(もどき)を計算していただくと上記のようです。これを使って pi を変数定義したものが以下に。uLispDefvarPI

 

これで、piという「変数」が出来ました。これにCONSセル4個も使ってしまったけれども。

平方根

今回は三角関数メインで練習してみるつもりですが、ラジアン扱うときには平方根が頻出するので確認しておきます。

まずはCommon Lispから。sqrt2

上記をみると後ろの方に f とあるので、単精度浮動小数で返ってくるようです。まあ、Common Lispでもこの辺の扱いは一律でないようなので、たまたま手元の環境ではということであります。

uLispでも計算は問題なし。uLispSQRT2

これも単精度の値だと思いますが、uLispでは小数点以下5桁表示がデフォルトみたいっす。

SINとCOS

ここは特に問題なし。まずは Common Lisp。sinCos

続いて uLisp。uLispSinCos

MaximaからLispしているための問題発覚

ここでまさかの問題発覚、Common Lispに tan計算してもらおうとしたらこんなエラーに遭遇。MaximaShadowsTAN

え~、タンジェントが無いわけないじゃん! その理由はCommon Lispを呼び出している環境にありでした。Lisp処理系を直接呼び出しているわけでなく、Maxima処理系の下に隠れている SBCL を使役しているので、間にMaxima様の「層」があるのです。ここでMaxima様の注意を発見。MaximaShadowed

どういう大人の事情か、Lispの関数が「隠されている」ものがあるみたい。あれよ、練習しようとした tan とか、逆三角関数どもは、そうだと。しかたねえずら。

uLispのTANは以下です。uLispTan

uLispのASINとACOSが以下です。uLisp_asin_acos

(asin 1)の結果は (/ pi 2)と一致しているので π/2 であることが分かります。

なお、Common Lispでなく、Maxima様上での tan、asin、acosの結果、ご参考まで。MaximaTANASINACOS

意図しなければ、浮動小数ではなく、πを使った数学的表記で結果が返ってまいります。流石だ。

Lispと一緒(10) ラズパイPico2でもuLisp、算術演算、「細かい」違いはある へ戻る

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です