出了什么问题?
[1]> (log (exp 1))
0.99999994
答案 0 :(得分:10)
这是由于分数的浮点表示的有限精度。
请参阅:http://en.wikipedia.org/wiki/Floating_point
(exp 1)
将是e
的近似值(需要无限精度才能完美表示)。该近似的自然对数将近似(但不完全)1
。了解浮点表示将使您了解发生这种情况的原因。
CLISP正在使用您的机器架构的浮动本机表示。最常见的是,这种表示形式是由IEEE 754指定的格式(通常为32位或64位;在您的情况下,它看起来像32位)。简而言之,小数部分由反幂2的总和表示(即,1/2
,1/4
,1/8
的某种组合,...... 1/2^32
,等。)
答案 1 :(得分:2)
尝试使用双精度浮点:
(log (exp 1.0d0))
=> 1.0D0
;至少在Clozure CL中