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

| 什么地方出了错?
 [1]> (log (exp 1))
 0.99999994
    
已邀请:
这是由于分数的浮点表示形式的精度有限。 请参阅: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
的某种组合)     
尝试使用双精度浮点数:
(log (exp 1.0d0))
=>
1.0D0
;至少在Clozure CL中     

要回复问题请先登录注册