Next: Predicates on Numbers, Previous: Integer Basics, Up: Numbers [Contents][Index]
浮動小数点数は整数ではない数を表現するのに有用です。浮動小数点数の範囲は、使用しているマシンでのCデータ型のdouble
と同じ範囲です。Emacsで現在サポートされているすべてのコンピューターでは、これは倍精度のIEEE浮動小数点数です。
浮動小数点数にたいする入力構文は、小数点と指数のどちらか1つ、または両方が必要とします。オプションの符号(‘+’か‘-’)は、その数字と指数の前に記述します。たとえば‘1500.0’、‘+15e2’、‘15.0e+2’、‘+1500000e-3’、‘.15e4’は値が1500の浮動小数点数を記述する5つの方法です。これらはすべて等価です。Common Lispと同様、Emacs Lispは浮動小数点数の小数点の後に少なくとも1つの数字を必要とします。‘1500.’は整数であって浮動小数点数ではありません。
Emacs
Lispはequal
と=
に関して、-0.0
を通常の0と数学的に同じものとして扱います。これは、(他の処理がこれらを区別にしても-0.0
と0.0
は数学的に等しいとする)IEEE浮動小数点数規格にしたがっています。
IEEE浮動小数点数規格は浮動小数点数として、正の無限大と負の無限大をサポートします。この規格はNaNまたは“not a
number(数字ではない)”と呼ばれる値クラスも提供します。正しい答えが存在しないような場合に、数学関数はこのような値をリターンします。たとえば(/
0.0 0.0)
はNaNをリターンします。実用に際し、たとえNaN値に符号がついていたとしても、Emacs
Lispでは異なるNaN値に有意な差はありません。
以下は、これらの特別な浮動小数点数にたいする入力構文です:
‘1.0e+INF’と‘-1.0e+INF’
‘0.0e+NaN’と‘-0.0e+NaN’
以下の関数は浮動小数点数を扱うために特化したものです:
この述語は浮動小数引数がNaNならt
、それ以外はnil
をリターンする。
この関数はコンスセル(s
.
e)
をリターンする。ここでsとeは、浮動小数点数の仮数(浮動小数点数を2の指数表現したときの仮数)と指数である。
xが有限ならsは0.5以上1.0未満の浮動小数点数、eは整数で、 x = s * 2**eとなる。 xが0または無限ならsはxと等しくなる。xがNaNならsもNaN。xが0ならeは0。
数値の仮数sと整数の指数eを与えられると、この関数は浮動小数点数 s * 2**eをリターンする。
この関数はx2の符号をx1の値にコピーして結果をリターンする。x1とx2は浮動小数でなければならない。
この関数はxの2進指数をリターンする。より正確には、これは|x|の2を底とする対数を整数に切り下げた値。
(logb 10) ⇒ 3 (logb 10.0e20) ⇒ 69