#:g1: Common Lispでsingle-floatを返す関数をdouble-float返すようにする設定はあるか

Posted 2021-05-09 23:17:53 GMT

Common Lispでsingle-floatを返す関数をdouble-float返すようにする設定はあるか

Common Lispの標準状態の浮動小数点の精度は、単精度(single-float)です。
最近のプログラミング言語の標準の精度は倍精度(double-float)だったりするので、言語間を跨ぐと若干面倒だったりするのですが、標準で倍精度にする設定はないのでしょうか。

# Python
import cmath
cmath.sqrt(-1/3)
→ 0.5773502691896257j

;; Common Lisp
(sqrt -1/3)
→ #C(0.0 0.57735026)

結論:そういう設定はない

結論からいうと、そういう設定はありません。

*read-default-float-format*double-floatにすると良いという話は良く耳にしますが、浮動小数点数の読み取りのデフォルトを設定するのみなので、整数等の読み取りには影響なしです。

(setq *read-default-float-format* 'double-float)
→ double-float

(sqrt -1/3) → #C(0.0F0 0.57735026F0)

(expt 1 1/2) → 1.0F0

上記のような場合、入力側で整数等を浮動小数点数に変換してやることになります。

(sqrt (float -1/3 0d0))
→ #C(0.0D0 0.5773502691896257D0)

(expt 1 (float 1/2 0d0)) → 1.0D0

まとめ

結局のところユーティリティパッケージを作成するしかないようですが、そういうパッケージを見掛けない気がするので需要はないのかもしれません。

作成するとしたら、Common Lispの標準関数で該当するものをdouble-float:sqrtのようにまとめることになりそうです。


HTML generated by 3bmd in LispWorks 7.0.0

comments powered by Disqus