Cer*_*dav 1 lisp math floating-point precision
什么地方出了错?
[1]> (log (exp 1))
0.99999994
Run Code Online (Sandbox Code Playgroud)
Ken*_*kot 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
,等等)