【问题标题】:lua decimals break around -0.1 to 0.1 (exclusive)lua 小数点在 -0.1 到 0.1 左右(不包括在内)
【发布时间】:2016-11-09 05:56:06
【问题描述】:

我有一个 Lua for 循环,它以 0.01 的增量迭代从 -1 到 1 的数字,并且在 -0.1 到 0.1 的范围内(不包括)产生与 6.6613381477509e-016 一样糟糕的数字

我在 LOVE 引擎 (v 0.9.2) 中使用 Lua,用 C++ 编写

我宁愿解决问题,也不愿收到解释的信息转储,但我宁愿那样做。

(我也理解浮点数不准确的一般原因,因此可能会被忽略)

【问题讨论】:

  • 我看不出 6.6613381477509e-016 是个坏数字。它出现在 -0.01 和 0.01 之间,对吧?
  • 向我们展示代码。如果您从 -1.0 开始并以 0.01 递增 100 次获得该值,我一点也不感到惊讶。
  • 在我的系统上,这个:lua -e 'x = -1 for i = 1,100 do x = x + 0.01 end print(x)' 打印 7.5286998857393e-16
  • 他们不再在初级计算机课程中教这个吗?

标签: lua floating-accuracy love2d


【解决方案1】:

你已经知道原因了,这里有一个可能的解决方案:不要循环使用浮点数,使用整数。

代替

for i = -1, 1, 0.01 do

使用:

for i = -100, 100 do
  print(i / 100)
end

【讨论】:

    猜你喜欢
    • 2020-02-01
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 2015-05-31
    • 2018-10-04
    • 2017-01-29
    • 2013-06-03
    • 1970-01-01
    相关资源
    最近更新 更多