如何解决在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中
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。