8.15.2024

Lua超新手無窮迴圈的陷阱

 以下Lua Code:

math.log2 = function (x)
    return math.log(x) / math.log(2)
end
...
 for i = math.floor(math.log2(n)) - 1, math.floor(math.log2(n)) do
 ...

n是 >= 0的整數,要注意for有可能造成無窮迴圈,
因為math.log(0)是-inf,不會彈出錯誤,
所以造成for變成無窮迴圈,而不只是做兩次…
另外注意,-inf跟同樣是-inf比對是true, 例如:
ath.log(0) == -3/0
==> true
若是nan比對,一定是false, 例如:
math.log(-1) == math.log(-1)
==> false