我写了一个小脚本来创建斐波那契数列,并返回所有偶数整数的和。

function even_fibo()
  -- create Fibonacci sequence
  local fib = {1, 2}  -- starting with 1, 2
  for i=3, 10 do
    fib[i] = fib[i-2] + fib[i-1]
  end
  -- calculate sum of even numbers
  local fib_sum = 0
  for _, v in ipairs(fib) do
    if v%2 == 0 then
      fib_sum = fib_sum + v
    end
  end
  return fib_sum
end

fib = even_fibo()
print(fib)


该函数创建以下序列:
1, 2, 3, 5, 8, 13, 21, 34, 55

并返回其偶数之和:44

但是,当我将停止索引从10更改为100时,在for i=3, 100 do中返回的和为负-8573983172444283806,因为值变得太大。
为什么我的代码适用于10而不适用​​于100

最佳答案

在5.3版之前,Lua始终以浮点数形式在内部存储数字。在5.3中,Lua数字可以内部存储为整数或浮点数。一种选择是运行Lua 5.2,我想您会发现代码可以按预期工作。另一个选择是使用浮点数初始化数组,这将在将来将对它们的所有操作提升为浮点数:

local fib = {1.0, 2.0}

10-06 12:42
查看更多