我写了一个小脚本来创建斐波那契数列,并返回所有偶数整数的和。
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}