gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:39:38 24 4
gpt4 key购买 nike

如您所知, float 存在精度问题,即值 1 将是 0.9999999。而lua在C中使用==来判断两个double数是否相等。所以问题是:

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 传递给使用 lua_tonumber 获取值的 c/c++,我将此值存储在 double 变量中,一段时间后,我将值 (lua_pushnumber) 推送到 lua,并且 < 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

最佳答案

As you know, float point has a precision problem, that is a value 1 will be 0.9999999

我完全不知道。因为这不是真的。 1.0 就是 1.0。这:

a = 1
if a < 1 then print("<1") end

永远不会打印“<1”。除非你真的改变了 a。即使这样:

a = 2
a = a - 1
if a < 1 then print("<1") end

同样永远不会触发 print 语句。

只要你对 Lua 的数字进行整数运算,你就会得到整数。整数值的加法、减法或乘法都不会得到非整数值。

关于lua - 如果 lua number 是 double,=/<=/>= 操作总是正确的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10526615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com