Lua添加错误

问题描述 投票:2回答:2

当处理大数字(64位值)时,似乎Lua的添加不起作用。我试图计算以下内容:

71776119061217280 + 281474976710655

或者在六进制中

  0x00FFFFFFFFFFFF‬
+ 0x‭FF000000000000

Lua 5.1,5.2和5.3全部归还

72057594037927936 (= 0x‭100000000000000)

无需拿出计算器就可以看出这是错误的。添加到奇数的偶数不是偶数。事实上,它似乎是1(正确的结果是72057594037927935)。在hexa中,问题更加明显,因为结果应为0xFFFFFFFFFFFFFF。任何人都知道发生了什么,或者我在这里做错了什么?

更新:

有关信息,我在Windows 10上看到ZeroBrane Studio

lua integer 64bit addition zerobrane
2个回答
1
投票

这些是我使用ZeroBrane Studio中包含的Lua解释器为此脚本获得的结果:

print(("%.17g"):format(71776119061217280 + 281474976710655))
print(71776119061217280 + 281474976710655)

Lua 5.1(它实际上是LuaJIT解释器):

72057594037927936
7.2057594037928e+016

Lua 5.2:

72057594037927936
7.2057594037928e+016

Lua 5.3

72057594037927936
72057594037927935

如果您在IDE的本地控制台中运行它,那么您将看到72057594037927936,因为它在序列化结果期间使用%.17g格式。

本地控制台总是使用IDE执行的解释器,在所有平台上都是Lua 5.1(实际上是LuaJIT),所以这可能是对结果产生混淆的地方。设置解释器只会更改用于运行和调试脚本的内容,而不会更改本地控制台(至少在当前版本中,因为可能会更改门票)。这不应该影响工具提示和堆栈/观察窗口,因为它们使用%.16g格式,可以使用debugger.numformat设置更改;控制台是唯一使用%.17g格式的地方,因为它是一个recommended to avoid losing precision


2
投票

什么颠覆Lua 5.3?就像在linux(amd64)机器上一样,我得到:

$ lua
Lua 5.3.4  Copyright (C) 1994-2017 Lua.org, PUC-Rio
> 71776119061217280 + 281474976710655
72057594037927935
>
© www.soinside.com 2019 - 2024. All rights reserved.