我想使用lua(内部仅使用双精度)来表示一个整数,该整数不能在0到2 ^ 64-1之间出现舍入误差,否则会发生可怕的事情.
有可能这样做吗?
没有
必须使用64位双精度的至少一些位来表示指数(二进制点的位置),因此实际数量可用的位数少于64位.所以不,64位双精度不能代表64位整数的所有值(反之亦然).
即使你对64位类型的问题得到了一些很好的答案,你仍然可能需要一个实际的解决方案来解决你的具体问题.我所知道的最可靠的解决方案是使用LNUM补丁(也称为Lua整数补丁)构建Lua 5.1,可以从LuaForge下载.如果您不打算从C源构建Lua,那么至少有一个纯Lua库可以处理64位有符号整数 - 请参阅Lua-users wiki.