#:g1: decimalsの紹介

Posted 2014-03-31 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の91日目です。

decimalsとはなにか

 decimalsは、十進浮動小数点数の文字列表現を扱うライブラリです。
どうも以前は、cl-decimalsという名前だったようですが、現在のQuicklispでは、decimalsで登録されているようです。

パッケージ情報

パッケージ名decimals
Quicklisp
CLiKihttp://cliki.net/decimals
Quickdocshttp://quickdocs.org/cl-decimals

インストール方法

(ql:quickload :decimals)

試してみる

 どんな関数があるかは、Quickdocsで確認できます。

 ライブラリの内容はシンプルで、decimals:parse-decimal-numberがメインの関数です。

(decimals:parse-decimal-number "3333.3333")
;=>  33333333/10000

 十進浮動小数点数の文字列表現を有理数に変換してくれます。

 その他には、十進浮動小数点数の表示用にdecimals:format-decimal-number、四捨五入にdecimals:round-half-away-from-zeroが用意されています。

(decimals:format-decimal-number (decimals:parse-decimal-number "3333.3333") :rounder #'truncate)
;=>  "3333"
;    ("" "3333" "." "")

(decimals:round-half-away-from-zero 0.5) ;=> 1 ; -0.5 (decimals:round-half-away-from-zero 0.4) ;=> 0 ; 0.4

(decimals:round-half-away-from-zero -0.5) ;=> -1 ; 0.5

(decimals:round-half-away-from-zero -0.4) ;=> 0 ; -0.4

まとめ

 今回は、decimalsを紹介してみました。
Pythonなどでの同様のライブラリは計算式も受け付けるものがあるようなのですが、Common Lispの場合は、有理数に直してしまえば精度は気にしなくても良いので有理数に変換するものさえあれば大丈夫ですね。

comments powered by Disqus