Lua加法错误

Lua加法错误,lua,integer,64-bit,addition,zerobrane,Lua,Integer,64 Bit,Addition,Zerobrane,在处理大数字(64位值)时,Lua加法似乎不起作用。我已尝试计算以下各项: 71776119061217280 + 281474976710655 或者用六边形 0x00FFFFFFFFFFFF‬ + 0x‭FF000000000000 LUA5.1、5.2和5.3全部返回 72057594037927936 (= 0x‭100000000000000) 不需要拿出你的计算器就知道这是错的。奇数加偶数不是偶数。事实上,它似乎以1为准(正确的结果是72057594037927935)。在

在处理大数字(64位值)时,Lua加法似乎不起作用。我已尝试计算以下各项:

71776119061217280 + 281474976710655
或者用六边形

  0x00FFFFFFFFFFFF‬
+ 0x‭FF000000000000
LUA5.15.25.3全部返回

72057594037927936 (= 0x‭100000000000000)
不需要拿出你的计算器就知道这是错的。奇数加偶数不是偶数。事实上,它似乎以1为准(正确的结果是72057594037927935)。在hexa中,问题更加明显,因为结果应该是0xFFFFFFFFFFFF。 有人知道发生了什么,或者我会做错什么吗

更新:
关于信息,我在Windows 10上看到了这一点。

什么是Lua
5.3的颠覆?在linux(amd64)机器上,我得到:

$ lua
Lua 5.3.4  Copyright (C) 1994-2017 Lua.org, PUC-Rio
> 71776119061217280 + 281474976710655
72057594037927935
>

以下是我使用ZeroBrane Studio附带的Lua解释器为该脚本获得的结果:

print(("%.17g"):format(71776119061217280 + 281474976710655))
print(71776119061217280 + 281474976710655)
Lua5.1(实际上是LuaJIT解释器):

Lua 5.2:

72057594037927936
7.2057594037928e+016
Lua 5.3

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


本地控制台总是使用IDE执行时使用的解释器,在所有平台上都是Lua5.1(实际上是LuaJIT),因此这可能是导致结果混淆的原因。设置解释器只会更改用于运行和调试脚本的内容,而不会更改本地控制台(至少在当前版本中是这样,因为存在可能会更改此内容的票证)。这不应影响工具提示和堆栈/监视窗口,因为它们使用
%.16g
格式,可以使用
调试器.numformat
设置更改格式;控制台是唯一使用
%.17g
格式的地方,因为它是唯一的一个

非常有趣。我过去常和Lua一起工作。从那里我无法运行lua命令。所以我直接打开lua53.exe,试图计算71776119061217280+281474976710655,它给了我正确的答案。我开始怀疑Zerobrane工作室里有一只虫子。真的很奇怪。我不太确定IDE怎么会给你这个错误。嗨,保罗,非常感谢你的快速回复。我没想到你会这么快赶上zerobrane标签!我得到的结果和你一样。但是,问题是,如果打开C:\Program Files(x86)\ZerobraineStudio\bin\lua53.exe(windows 10 case)并运行相同的命令,结果是正确的。如果IDE的解释器被设置为LUA5.3,它会不会使用我提到的可执行文件来进行计算?如果是这样,IDE中的结果与lua 53可执行文件相比会有什么不同?本地控制台总是使用IDE执行时使用的解释器,在所有平台上都是lua 5.1(实际上是LuaJIT),因此这可能是造成混淆的原因。设置解释器只会更改用于运行和调试脚本的内容,而不会更改本地控制台(至少在当前版本中是这样,因为有票证可能会更改)。Paul如果你想将此作为答案,我会将问题标记为已回答。我想提到的一点是,如果我处于脚本的中间,查看变量足够大的值,则该值在工具提示中也会出现错误。根据您提供的答案,我意识到所有这些都是由于序列化,存储在内存中的值实际上是正确的。在Windows上使用Lua时,我也遇到了这个大量错误。但是如果我使用Cygwin Lua,它会返回正确的数字。我认为这可能与支持大整数的build标志有关。
72057594037927936
72057594037927935