我正在处理那些我无法完成的大数字.使用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(但我找不到任何来源)
此外,如果已建立绑定,则可以从Lua调用C 中的许多库.
您是否有过使用这些库中的一个或多个的经验?
使用lbc而不是lmapm会更容易,因为lbc是自包含的.
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)
Lua Figueiredo 的lmapm图书馆,Lua语言的作者之一.
我使用Norman Ramsey的建议来解决Project Euler问题#16.我认为问题的关键在于准确计算303位整数,这并不是一个扰流.
以下是我需要安装和使用库的步骤:
Lua需要在启用动态加载的情况下构建.我使用Cygwin,但我改变PLAT
的src/Makefile
是linux
.默认情况下,none
不启用动态加载.
该MAMP需要建立和安装的地方,你的C编译器可以找到它.我把libmapm.a
在/usr/local/lib/
.接下来m_apm.h
和m_apm_lc.h
去/usr/local/include/
.
需要将lmamp的makefile 更改为Lua和MAMP库的正确位置.对我来说,这意味着在取消的第二个声明LUA
, LUAINC
,LUALIB
,和LUABIN
和编辑的声明MAMP
.
最后,mapm.so
需要放在Lua会找到的地方.我把它放在了/usr/local/lib/lua/5.1/
.
谢谢大家的建议!
我无法回答,但我会添加LGMP,一个GMP绑定.不曾用过.
不是我的专业领域,但我希望GNU多精度算术库在这里成为一个标准,不是吗?