2008-11-13 64 views
18

我與我已經不能四捨五入大量工作。使用Lua的標準數學庫,似乎沒有方便的方法來保持精度超過一定的內部限制。我也看到有一些可裝載大數字工作的幾個庫:Lua的標準(或最佳支持)大數字(任意精度)庫是什麼?

  1. http://oss.digirati.com.br/luabignum/
  2. http://www.tc.umn.edu/~ringx004/mapm-main.html
  3. http://lua-users.org/lists/lua-l/2002-02/msg00312.html(可能是相同的#2)
  4. http://www.gammon.com.au/scripts/doc.php?general=lua_bc(但我不能找到任何來源)

此外,有C中的many libraries可以從Lua調用,如果綁定在哪裏建立。

你有過與一個或多個這些庫的經驗嗎?

+1

我寫的Lua綁定幾個大數字圖書館:LBC,黎巴嫩,lint64,lmapm,LQD,所有可用的http://www.tecgraf.puc-rio.br/~lhf/ftp/ LUA /。他們有不同的功能和要求。 – lhf 2013-08-14 12:35:35

回答

5

作者Luis Figueiredo,Lua語言的作者之一lmapm library

5

我真的不能回答,但我會加上LGMP,一個GMP綁定。不曾用過。

不是我的專業領域,但我希望GNU多精度算術庫在這裏是相當標準的,不是嗎?

+1

啊。這是有幫助的GMP文件並沒有列出它:http://gmplib.org/manual/Language-Bindings.html#Language-Bindings – 2008-11-13 23:46:31

3

雖然不是任意精度,Lua decNumber,一個用於IBM decNumber的Lua 5.1包裝,實現了提議的通用十進制算術標準IEEE 754r。它具有Lua 5.1算術運算符等,完全控制舍入模式,工作精度高達69位十進制數字。

+1

69?這大約是我需要的三分之一。 (我正在)。 – 2008-11-17 22:58:22

6

我用諾曼拉姆齊的建議來解決項目歐拉問題#16。我認爲這個問題的癥結在於準確地計算一個303位數的整數,這不是一個擾流板。

這裏有我需要安裝和使用該庫的步驟:

  1. 的Lua需要與動態加載使待建。我使用Cygwin,但我在src/Makefile改變PLATlinux。缺省值none不支持動態加載。

  2. MAMP需要構建並安裝在C編譯器可以找到它的地方。我在/usr/local/lib/libmapm.a。接下來m_apm.hm_apm_lc.h/usr/local/include/

  3. 需要將lmamp的生成文件更改爲Lua和MAMP庫的正確位置。對我而言,這意味着取消註釋LUA,LUAINC,LUALIBLUABIN的第二個聲明並編輯MAMP的聲明。

  4. 最後,mapm.so需要放置在Lua會找到它的地方。我把它放在/usr/local/lib/lua/5.1/

謝謝大家的建議!

13

使用,因爲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) 
相關問題