首页 文章

最好的跨平台(便携式)任意精度数学库[关闭]

提问于
浏览
73

我在C或C中寻找一个好的任意精度数学库 . 你能给我一些意见/建议吗?

主要要求:

  • It MUST 处理任意大整数(我的主要兴趣是整数) . 如果你不知道这个词是什么意思大,意味着像100000这样的东西! (阶乘为100000) .

  • 在库初始化/对象创建期间指定精度 MUST NOT NEED . 精度应该受到系统可用资源的限制 .

  • It SHOULD 利用平台的全部功能,并且应该本地处理"small"数字 . 这意味着在64位平台上,计算2 ^ 33 2 ^ 32应该使用可用的64位CPU指令 . 库 SHOULD NOT 以与在同一平台上使用2 ^ 66 2 ^ 65相同的方式计算它 .

  • It MUST 句柄加法(),减法( - ),乘法(*),整数除法(/),余数(%),幂(**),增量(),减量( - ),gcd(),阶乘(),以及其他常见的整数算术计算 . 能够处理不产生整数结果的sqrt()(平方根),log()(对数)等函数是一个优点 . 处理symbolic computations的能力更好 .

这是我到目前为止发现的:

  • JavaBigIntegerBigDecimal 课程:到目前为止我一直在使用这些 . 我已经阅读了源代码,但我不了解下面的数学 . 它可能基于我从未学过的理论/算法 .

  • 内置整数类型或核心库 bc / Python / Ruby / Haskell / Lisp / Erlang / OCaml / PHP /其他一些语言:我曾经使用过其中的一些,但我不知道它们是哪个库使用,或者他们正在使用哪种实现 .

我所知道的:

  • 使用 char 作为十进制数字,使用 char* 作为十进制字符串,并使用for循环对数字进行计算 .

  • 使用 int (或 long intlong long )作为基本"unit"及其数组作为任意长整数,并使用for循环对元素进行计算 .

  • 使用整数类型将十进制数字(或几位数)存储为 BCD (Binary-coded decimal) .

  • Booth's multiplication algorithm

我不知道的是:

  • 在不使用朴素方法的情况下以十进制打印上述二进制数组 . 一个朴素方法的例子:(1)添加从最低到最高的位:1,2,4,8,16,32 ......(2)使用上面提到的 char* 字符串来存储中间小数结果) .

我很欣赏:

  • GMPMPFRdecNumber (或您认为合适的其他图书馆)的良好比较 .

  • 关于我应该阅读的书籍/文章的好建议 . 例如,有关 un-naive 二进制到十进制转换算法如何工作的数字的插图是好的 . Douglas W. Jones的文章 "Binary to Decimal Conversion in Limited Precision" 是一篇好文章的例子 .

  • 任何帮助 .

DO NOT 回答这个问题,如果:

  • 您认为使用 double (或 long doublelong long double )可以轻松解决此问题 . 如果你这么认为,那就意味着你不理解正在讨论的问题 .

5 回答

  • 3

    GMP是受欢迎的选择 . Squeak Smalltalk有一个非常好的库,但它是用Smalltalk编写的 .

    你问了相关的书籍或文章 . bignums的棘手部分是长期划分 . 我推荐Per Brinch Hansen的论文Multiple-Length Division Revisited: A Tour of the Minefield .

  • 7

    总的来说,他最快的通用任意精度库是GMP . 如果要使用浮点值,请查看MPFR库 . MPFR基于GMP .

    关于其他语言中的本机任意精度支持,由于许可证,代码大小和代码可移植性原因,Python使用自己的实现 . GMPY模块允许Python访问GMP库 .

    casevh

  • 13

    值得一提的是,GHC Haskell和GNU Guile Scheme中的任意精度整数都是使用GMP实现的,而pidigits benchmark on the language shootout的最快实现基于GMP .

  • 24

    如果您对实际情况有疑问,请参阅http://ttmath.org

  • 7

    Pari怎么样?它 Build 在顶级GMP之上,提供了您将需要的数论运算的所有其他好处(以及许多符号计算的东西) .

    http://pari.math.u-bordeaux.fr/

相关问题