Luaの標準(または最高のサポート)ビッグナンバー(任意精度)ライブラリとは何ですか?
質問
私は、四捨五入できない大きな数字を扱っています。 Luaの標準の数学ライブラリを使用すると、内部の制限を超えて精度を維持する便利な方法がないようです。また、大きな数字で動作するようにロードできるライブラリがいくつかあります:
- http://oss.digirati.com.br/luabignum/
- http://www.tc.umn.edu/~ringx004/ mapm-main.html
- http://lua-users.org/lists/ lua-l / 2002-02 / msg00312.html (#2と同じ場合があります)
- http://www.gammon.com.au/scripts/ doc.php?general = lua_bc (ただし、ソースが見つかりません)
さらに、Cには多くのライブラリを呼び出すことができますバインディングが確立されている場合、Luaから。
これらのライブラリを1つ以上使用した経験はありますか?
解決
Luiz Figueiredoによる lmapmライブラリ Lua言語の著者の。
他のヒント
代わりに lbc を使用するlbcは自己完結型なので、lmapmの方が簡単です。
require"bc"
s=bc.pow(2,1000):tostring()
z=0
for i=1,#s do
z=z+s:byte(i)-("0"):byte(1)
end
print(z)
Norman Ramseyの提案を使用して、Project Eulerの問題を解決しました#16 。問題の核心が303桁の整数を正確に計算していると言うのはネタバレだとは思いません。
ライブラリをインストールして使用するために必要な手順は次のとおりです。
-
Luaは、動的ロードを有効にして構築する必要があります。 Cygwinを使用していますが、
src / Makefile
のPLAT
をlinux
に変更しました。デフォルトのnone
は、動的ロードを有効にしません。 -
MAMP をビルドしてインストールする必要がありますCコンパイラが見つけられる場所。
libmapm.a
を/ usr / local / lib /
に配置します。次に、m_apm.h
とm_apm_lc.h
は/ usr / local / include /
に行きました。 -
lmamp のメイクファイルが必要LuaおよびMAMPライブラリの正しい場所に変更されます。私にとって、それは
LUA
、LUAINC
、LUALIB
、およびLUABIN
の2番目の宣言のコメントを外し、宣言を編集することを意味しますMAMP
の。 -
最後に、
mapm.so
はLuaが見つける場所に配置する必要があります。/usr/local/lib/lua/5.1 /
に置きます。
ご提案ありがとうございます!
実際には答えられませんが、 LGMP 、GMPバインディング。使用されていません。
私の専門分野ではありませんが、ここではGNUの多精度算術ライブラリが非常に標準的であると期待していますか?
任意の精度ではありませんが、 Lua decNumber 、Lua 5.1 IBM decNumberのラッパー。提案されている一般的な10進算術標準IEEE 754rを実装します。 Lua 5.1算術演算子など、丸めモードを完全に制御し、最大69桁の10進数で動作する精度を備えています。