【发布时间】:2015-11-12 09:28:48
【问题描述】:
在 Lua 中做一些练习时,我偶然发现了一些(对我而言)非常奇怪的行为,我无法解释。以下代码用于计算 2 此代码提供正确答案,9183:
local terms = {}
local cnt = 0
for a = 2, 100 do
for b = 2, 100 do
term = math.pow(a, b)
if not terms[term] then
terms[term] = string.format("%d exp %d", a, b)
cnt = cnt + 1
else
print(term .. " already in set! (" .. terms[term] .. ")")
end
end
end
print(cnt)
然而,这个代码产生了不同的答案(只有else分支中的'print()'被注释掉了):
local terms = {}
local cnt = 0
for a = 2, 100 do
for b = 2, 100 do
term = math.pow(a, b)
if not terms[term] then
terms[term] = string.format("%d exp %d", a, b)
cnt = cnt + 1
else
--print(term .. " already in set! (" .. terms[term] .. ")")
end
end
end
print(cnt)
那里。这让我得到了 9254 作为答案。在该注释掉的行中没有进行任何计算,只是输出到屏幕上。然而,它似乎会影响计算的结果。我是否发现了一个构成量子力学定律基础的宏观系统? ;)
不,但说真的,我在这里遗漏了一些东西,如果有更多经验和知识的人能指出我正确的方向,我将非常感激。
提前致谢!
【问题讨论】:
-
也许你应该在一些 Lua 特定的列表或论坛上询问...
-
是的,我想你是对的。我会再等一天左右。如果在那之后没有人给出更具体的答案,我会选择你的答案,因为它给我带来了一些洞察力和一个很棒的网站,我可以阅读并随后传播。
-
什么版本的 Lua?什么C编译器?什么操作系统? Lua 是如何配置和编译的?
-
在 Mac OS X 中使用 Lua 5.1.5、5.2.4、5.3.1 时,两个程序都为我输出了相同的
cnt值。 -
@ChristophFloat:我相信 ZeroBrane Studio 默认使用 LuaJIT 作为其 Lua 5.1 解释器。如果是这种情况,对
print函数的调用可能会阻止for循环的JIT 编译,从而导致意外行为。你可以试试在开头加jit.off()看看是不是这样。
标签: lua exponential