我目前正在研究一个对 64 位整数执行计算的 Lua 项目。我的第一反应是切换LUA_NUMBER
到int64_t
in luaconf.h
。在那之后没有用,我发现了LNUM补丁,它似乎提供了我需要的功能。
我通过运行使用 LNUM 补丁重建了 lua
补丁 < ../../lua512_numbers.patch
运行此程序并重新运行我的代码后,我仍然无法对 2^62 + 1 这样大的数字执行数学运算。(我也无法通过 lnum 补丁附带的 test.lua)。
我用以下每种方式切换了我的 luaconf.h - 但它没有任何区别。_LNUM 打印出双倍。
注意:我已经在 lua 5.1.2、5.1.3、5.1.5 中尝试过这个
#define LNUM_FLOAT
#define LNUM_INT64
# define LUA_INTEGER long long
# ifdef _MSC_VER
# define lua_str2ul _strtoui64
# else
# define lua_str2ul strtoull
# endif
# define LUA_INTEGER_SCAN "%lld"
# define LUA_INTEGER_FMT "%lld"
# define LUA_INTEGER_MAX 0x7fffffffffffffffLL /* 2^63-1 */
# define LUA_INTEGER_MIN (-LUA_INTEGER_MAX - 1LL) /* -2^63 */
# define LUA_NUMBER float
# define LUA_NUMBER_SCAN "%f"
# define LUA_NUMBER_FMT "%g"
并且还尝试直接设置LUA_NUMBER
和LUA_INTEGER
到LNUM_FLOAT
& LNUM_INT64
。
我想我误解了这个补丁/lua 的工作方式,如果有任何关于如何使用未签名或签名的 INT64 的指导,我将不胜感激。