log
(log number) (log number base)
number の自然対数 (底 e) を浮動小数点数として返します。base を与えるとその底での対数、すなわち商 (/ (log number) (log base)) そのものを返します。累乗をちょうどの値にするための特別扱いはなく、必要もありません: どのバックエンドでも単なる商から (log 8 2) は 3.0、(log 1024 2) は 10.0 になります。どのバックエンドも fdlibm で計算します(インタプリタと JVM では StrictMath.log、WASM では同じアルゴリズム)。そのため桁はどこでも一致します。IEEE の端値はどこでも一致します: (log 0.0) は -Infinity です。負の引数は実数直線を離れ、sqrt が負数を平方根で複素平面に移すのと同じように主値の対数を返します: (log -1) は #C(0.0 3.141592653589793) であり、(log -100) の実部は ln 100、虚部は pi です。したがって答えの型は引数の書き方ではなく値で決まります -- (let ((x -1d0)) (log x)) はどのバックエンドでも複素数です。
2 つの対数はそれぞれ独立にこの複素平面への移行を行うため、(log -8d0 2d0) は複素平面の値 -- 実部 3.0、虚部 pi / ln 2 -- を返します。number や base が複素数の場合も同様に、2 つの複素対数の商にすぎません。実部がちょうどの値になるのは (log 8 2) と同じ理由です: 底が実数なら複素数の除算は各成分をそれぞれ独立に割るため (/ を参照)、実部は 1 回だけ丸めた商 ln 8 / ln 2 そのものになります。