【发布时间】:2014-04-14 22:29:55
【问题描述】:
我正在使用 gambit-c 解释器来评估方案算术运算,但它的结果有点偏离。例如,我执行 (+ 23 20.01),它给了我 43.010000000000005,而不是 43.01。
只有当我使用带 2 个小数点的数字时才会发生这种情况。
有解决办法吗?
【问题讨论】:
我正在使用 gambit-c 解释器来评估方案算术运算,但它的结果有点偏离。例如,我执行 (+ 23 20.01),它给了我 43.010000000000005,而不是 43.01。
只有当我使用带 2 个小数点的数字时才会发生这种情况。
有解决办法吗?
【问题讨论】:
这与浮点计算的完成方式有关。请阅读What Every Programmer Should Know About Floating-Point Arithmetic。
你很幸运!在 Scheme 中,您可以使用确切的数字来解决此问题:
(+ 23 #e20.01) ; ==> 4301/100
您可以通过以下方式使其不精确:
(exact->inexact (+ 23 #e20.01)) ; ==> 43.01
【讨论】: