如您所知,浮点数有一个精度问题,即值 1 将是 0.9999999。而 lua 在 C 中使用 == 来检查两个双精度数是否相等。所以问题是:
a = 5.6
b = 14 * 0.4
print(a==b) ; => false
但更糟糕的是:
a = 1
...
if a < 1 then print("<1") end ; => sometimes a < 1
那么我该如何避免呢?我查看了 lua 源代码,看来我可以修改 luaconf.h 中的 luai_numeq/luai_numle) 宏,但这有必要吗?
更新
第二个例子并不正确。实际上我的问题是,我将一个值 1 传递给 c/c++,它使用 lua_tonumber 来获取该值,并将这个值存储在一个 double 变量中,一段时间后,我将值 (lua_pushnumber) 推送到 lua,并且 a < 1发生了:
in lua:
my_cfunction(1)
...
in c:
int my_cfunction(lua_State *L) {
double val = lua_tonumber(L, 1);
...
...
lua_pushnumber(L, val);
in lua:
local a = my_cfunction2()
if a < 1 then ... end