如果lua数是double,是=/<= /> =操作总是正确吗?

kev*_*ynx 2 floating-point lua

如您所知,浮点数存在精度问题,即值1将为0.9999999.并且lua在C中使用==来检查两个双数是否相等.所以问题是:

a = 5.6
b = 14 * 0.4
print(a==b) ; => false
Run Code Online (Sandbox Code Playgroud)

但最糟糕的是:

a = 1
...
if a < 1 then print("<1") end ; => sometimes a < 1 
Run Code Online (Sandbox Code Playgroud)

那我怎么能避免这个呢?我查看lua源代码,似乎我可以在luaconf.h中修改luai_numeq/luai_numle)宏,但这是必要的吗?

更新

第二个例子并不正确.实际上我的问题是,我将值1传递给使用lua_tonumber获取值的c/c ++,并将此值存储在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
Run Code Online (Sandbox Code Playgroud)

Nic*_*las 5

如您所知,浮点数存在精度问题,即值1将为0.9999999

我根本不知道.因为这不是真的.1.0是1.0.这个:

a = 1
if a < 1 then print("<1") end
Run Code Online (Sandbox Code Playgroud)

永远不会打印出"<1".除非你真的改变了a.即使这样:

a = 2
a = a - 1
if a < 1 then print("<1") end
Run Code Online (Sandbox Code Playgroud)

同样也不会print发表声明.

只要你对Lua的数字执行整数运算,你就会得到整数.没有整数值的加法,减法或乘法将使您具有非整数数值.