为什么在Common Lisp中,当我运行参数为1的函数“acos”时,答案是错的?

时间:2013-07-02 11:35:58

标签: common-lisp sbcl

当我运行(acos 1)时,

而不是0的正确答案,找到1个emacs的ArcCosine,我得到了答案

-6.125742f-17

为什么会这样,我如何得到正确的答案,如Windows计算器,它应该是

我在Windows 8和SBCL上使用SBCL作为我的Lisp解释器是32位

我跑的时候:

(acos (rational 1))

我得到相同的答案,当我跑

(acos (float 1))

我收到此错误

The value -6.1257422745431e-17
is not of type
  (DOUBLE-FLOAT 0.0 3.141592653589793).
   [Condition of type TYPE-ERROR]

1 个答案:

答案 0 :(得分:10)

sin(M_PI) is not 0的已接受答案也适用于此:

你需要阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic并意识到所有浮点计算都是近似的,你得到的近似值“足够好”。

至于SBCL错误,您应该report it to the SBCL maintainers