Math Lua的标准(或最受支持的)大数(任意精度)库是什么?

Math Lua的标准(或最受支持的)大数(任意精度)库是什么?,math,lua,precision,bignum,Math,Lua,Precision,Bignum,我正在处理大量的数字,这些数字我不能四舍五入。使用Lua的标准数学库,似乎没有方便的方法来保持精度超过某个内部限制。我还看到有几个库可以加载以处理大数字: (可能与#2相同) (但我找不到任何来源) 此外,在C中,如果绑定已建立,则可以从Lua调用 您有过使用一个或多个这样的库的经验吗?我不能回答,但我要补充一点,GMP绑定。没有用 这不是我的专业领域,但我希望GNU多精度算术库在这里是相当标准的,不?尽管不是任意精度,但IBM decNumber的Lua 5.1包装器实现了提议的通用十进制

我正在处理大量的数字,这些数字我不能四舍五入。使用Lua的标准数学库,似乎没有方便的方法来保持精度超过某个内部限制。我还看到有几个库可以加载以处理大数字:

  • (可能与#2相同)
  • (但我找不到任何来源)
  • 此外,在C中,如果绑定已建立,则可以从Lua调用


    您有过使用一个或多个这样的库的经验吗?

    我不能回答,但我要补充一点,GMP绑定。没有用


    这不是我的专业领域,但我希望GNU多精度算术库在这里是相当标准的,不?

    尽管不是任意精度,但IBM decNumber的Lua 5.1包装器实现了提议的通用十进制算术标准IEEE 754r。它具有Lua 5.1算术运算符和更多运算符,完全控制舍入模式,工作精度高达69位小数。

    由Lua语言的作者之一Luiz Figueiredo编写。

    我使用了诺曼·拉姆齐的建议来解决欧拉项目的问题。我不认为说问题的关键是准确地计算一个303位的整数是一个破坏者

    以下是安装和使用库所需的步骤:

  • Lua需要在启用动态加载的情况下构建。我使用Cygwin,但我将
    src/Makefile
    中的
    PLAT
    更改为
    linux
    。默认情况下,
    none
    ,不启用动态加载

  • 需要构建并安装在C编译器可以找到的地方。我将
    libmapm.a
    放在
    /usr/local/lib/
    中。接下来
    m_apm.h
    m_apm_lc.h
    转到
    /usr/local/include/

  • 需要将的makefile更改为Lua和MAMP库的正确位置。对我来说,这意味着取消对
    LUA
    LUAINC
    LUALIB
    LUABIN
    的第二个声明的注释,并编辑
    MAMP
    的声明

  • 最后,
    mapm.so
    需要放在Lua可以找到它的地方。我把它放在
    /usr/local/lib/lua/5.1/

  • 谢谢大家的建议

    使用替代lmapm会更容易,因为lbc是自包含的

    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,所有这些都可以在上找到。它们有不同的功能和要求。我的所有大型库都已更新,现在都是自包含的。请参阅。