1

I have learning Common Lisp for 2 months, I meet a puzzle, here is the code:

CL-USER> (round 33.6)
34
-0.40000153

anyone explain it? Thanks

4

1 回答 1

4

我不确定我是否理解你的问题。在 CLisp 中,round四舍五入到最接近的整数(除非您指定除数)。最接近的整数33.634使得该位是正确的。

并且由于round返回商余数,它给出34,余数为-0.4。这一点大部分是正确的,所以我怀疑你想知道为什么它只是“大部分”。

它不完全正确 -0.4的原因几乎可以肯定是由于浮点数的精度有限。计算(看似精确的)浮点数和整数之间的差异的结果可能令人惊讶:

CL-USER> (- 23.6 24) -0.39999962

您会期望在一个完美的世界中它会返回-0.4,但由于上述原因,它不会。

如果您想知道为什么会这样(即浮点如何在幕后工作),您可以查看thisthis作为示例。

于 2014-03-06T02:01:22.227 回答