1

現在、64 ビット整数の計算を実行する Lua プロジェクトに取り組んでいます。私の最初の本能は、 inに切り替えるLUA_NUMBERことでした。その後、うまくいかず、いろいろ調べてみると、必要な機能を提供しているように見えるLNUMパッチが見つかりました。int64_tluaconf.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_INTEGERLNUM_FLOAT&LNUM_INT64に直接設定してみました。

このパッチ/lua の動作について何か誤解していると思います。未署名または署名済みの INT64 を使用する方法についてのガイダンスをいただければ幸いです。

4

0 に答える 0