現在、64 ビット整数の計算を実行する Lua プロジェクトに取り組んでいます。私の最初の本能は、 inに切り替えるLUA_NUMBER
ことでした。その後、うまくいかず、いろいろ調べてみると、必要な機能を提供しているように見えるLNUMパッチが見つかりました。int64_t
luaconf.h
実行して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
、 andLUA_INTEGER
をLNUM_FLOAT
&LNUM_INT64
に直接設定してみました。
このパッチ/lua の動作について何か誤解していると思います。未署名または署名済みの INT64 を使用する方法についてのガイダンスをいただければ幸いです。