4

オリジナルメッセージ:

2つの64ビット数を乗算する必要がありますが、Luaは大きな数で精度を失っています。(たとえば、999999999999999999は100000000000000000と表示されます)乗算後、64ビットのソリューションが必要になるため、ソリューションを64ビットに制限する方法が必要です。(解決策が正確であれば、%0x10000000000000000を使用できるので、それでも機能します)

編集: Lua 5.3と新しい64ビット整数のサポートにより、この問題はもう存在しません。きちんとした。

4

2 に答える 2

3

Lua は、整数演算を含むすべての計算に倍精度浮動小数点を使用します ( http://lua-users.org/wiki/FloatingPointを参照)。これにより、約 53 ビットの精度が得られますが、これは (お気付きのように) 必要以上に少ないものです。

Lua で精度を上げるには、いくつかの方法があります。あなたの最善の策は、最も活発なそのような努力を見つけて、それに便乗することです. その場合、あなたの質問はすでに回答されています。チェックアウトLuaの標準(または最もサポートされている)大数(任意精度)ライブラリは何ですか?

Lua ディストリビューションにパッケージがある場合、簡単な答えはlmapmです。

于 2012-10-30T17:23:09.667 に答える
1

Lua の代わりにLuaJITを使用するlong longと、通常は 64 ビットのものを含め、すべての C99 組み込み型にアクセスできます。

local ffi = require 'ffi'

-- Needed to parse constants that do not fit in a double:
ffi.cdef 'long long strtoll(const char *restrict str, char **restrict endptr, int base);'

local a = ffi.C.strtoll("99999999999999999", nil, 10)
print(a)
print(a * a)

=> 3803012203950112769LL(結果が 64 ビットに切り捨てられると仮定)

于 2012-10-30T18:49:43.640 に答える