CLISP中自然对数的精度不正确。可能有什么问题?

时间:2011-04-13 21:36:47

标签: math lisp floating-point precision

出了什么问题?

 [1]> (log (exp 1))
 0.99999994

2 个答案:

答案 0 :(得分:10)

这是由于分数的浮点表示的有限精度。

请参阅:http://en.wikipedia.org/wiki/Floating_point

(exp 1)将是e的近似值(需要无限精度才能完美表示)。该近似的自然对数将近似(但不完全)1。了解浮点表示将使您了解发生这种情况的原因。

CLISP正在使用您的机器架构的浮动本机表示。最常见的是,这种表示形式是由IEEE 754指定的格式(通常为32位或64位;在您的情况下,它看起来像32位)。简而言之,小数部分由反幂2的总和表示(1/21/41/8的某种组合,...... 1/2^32等。

答案 1 :(得分:2)

尝试使用双精度浮点:

(log (exp 1.0d0))

=> 1.0D0;至少在Clozure CL中