Math Lua的标准(或最受支持的)大数(任意精度)库是什么?
我正在处理大量的数字,这些数字我不能四舍五入。使用Lua的标准数学库,似乎没有方便的方法来保持精度超过某个内部限制。我还看到有几个库可以加载以处理大数字:Math Lua的标准(或最受支持的)大数(任意精度)库是什么?,math,lua,precision,bignum,Math,Lua,Precision,Bignum,我正在处理大量的数字,这些数字我不能四舍五入。使用Lua的标准数学库,似乎没有方便的方法来保持精度超过某个内部限制。我还看到有几个库可以加载以处理大数字: (可能与#2相同) (但我找不到任何来源) 此外,在C中,如果绑定已建立,则可以从Lua调用 您有过使用一个或多个这样的库的经验吗?我不能回答,但我要补充一点,GMP绑定。没有用 这不是我的专业领域,但我希望GNU多精度算术库在这里是相当标准的,不?尽管不是任意精度,但IBM decNumber的Lua 5.1包装器实现了提议的通用十进制
您有过使用一个或多个这样的库的经验吗?我不能回答,但我要补充一点,GMP绑定。没有用
这不是我的专业领域,但我希望GNU多精度算术库在这里是相当标准的,不?尽管不是任意精度,但IBM decNumber的Lua 5.1包装器实现了提议的通用十进制算术标准IEEE 754r。它具有Lua 5.1算术运算符和更多运算符,完全控制舍入模式,工作精度高达69位小数。由Lua语言的作者之一Luiz Figueiredo编写。我使用了诺曼·拉姆齐的建议来解决欧拉项目的问题。我不认为说问题的关键是准确地计算一个303位的整数是一个破坏者 以下是安装和使用库所需的步骤:
src/Makefile
中的PLAT
更改为linux
。默认情况下,none
,不启用动态加载libmapm.a
放在/usr/local/lib/
中。接下来m_apm.h
和m_apm_lc.h
转到/usr/local/include/
LUA
、LUAINC
、LUALIB
和LUABIN
的第二个声明的注释,并编辑MAMP
的声明mapm.so
需要放在Lua可以找到它的地方。我把它放在/usr/local/lib/lua/5.1/
local bc = 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)
有几个库可以解决这个问题,每个库都有您的优点 缺点是,最好的选择取决于你的要求。我会说 是一个很好的首选,如果它 满足您的要求或Luiz Figueiredo的任何其他要求。对于最有效的一个,我想应该是任何使用GMP绑定的方法,因为GMP是处理大整数的标准C库,并且经过了很好的优化 不过如果你想找一个纯Lua的, 库可能是处理大整数的一个选项, 我不会说这是最好的,因为有更高效的 完成上面提到的那些,但通常需要编译C代码 或者设置起来很麻烦。但是,在比较纯Lua和大整数库时 根据您的用例,它可能是一个有效的选择。图书馆有文件记录, 代码完全包含在测试中,并且有许多示例。但接受这一建议,并给予足够的支持 因为我是图书馆的作者 要安装,您可以使用Luarock,如果您的计算机中已经有它,或者只需下载 文件,因为它除了需要Lua5.3+之外没有其他依赖项 下面是一个使用它解决问题的小示例#16来自Project Euler (在先前的答复中提到):
local bint=需要“bint”(1024)
局部n=bint(1)Ah。这很有帮助,因为GMP文件没有列出它:69?这大约是我需要的三分之一。(我在@JonEricson上工作,你知道你可以使用模运算来解决这些问题吗?如果你被要求找到7^3432566663432的数字之和怎么办?你的程序可以工作吗?我已经为几个大数字库编写了Lua绑定:lbc、lbn、lint64、lmapm、lqd,所有这些都可以在上找到。它们有不同的功能和要求。我的所有大型库都已更新,现在都是自包含的。请参阅。