什么是最好的(可移植的)跨平台任意精度的数学库?

我正在寻找一个良好的 C 或 C + + 任意精度的数学库。你能给我一些建议吗?

基本要求:

  1. 必须的可以处理任意大的整数ーー我的主要兴趣在于整数。如果你不知道“任意大”这个词是什么意思,想象一下100000!(100000的阶乘)。

  2. 在库初始化或对象创建期间指定的精度 必须不需要只有的精度应该受到系统可用资源的限制。

  3. 它的 应该利用平台的全部权力,并应处理“小”本地数字。这意味着在64位平台上,计算(2 ^ 33 + 2 ^ 32)应该使用可用的64位 CPU 指令。库 不应该计算这个值的方法与它在同一平台上计算(2 ^ 66 + 2 ^ 65)的方法相同。

  4. 必须的有效地处理加法(+)、减法(-)、乘法(*)、整数除法(/)、余数(%)、幂(**)、增量(++)、减法(--)、 GCD、阶乘和其他常见的整数算术计算。能够处理不产生整数结果的函数(如平方根和对数)是一个优点。处理 象征性计算的能力甚至更好。

以下是我目前为止的发现:

  1. Java 译自: 美国《科学》杂志网站(http://java.sun.com/javase/6/docs/api/java/data/BigInteger.html)译自: 美国《科学》杂志网站(http://java.sun.com/javase/6/docs/api/java/data/BigDecimal.html)类: 到目前为止我一直在使用它们。我读了源代码,但是我不明白其中的数学原理。它可能基于我从未学过的理论和算法。

  2. 内置的整数类型或者 翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳一个 href = “ http://docs.Python.org/release/3.1.2/reference/lexical _ analysis.html # whole-Literals”rel = “ noReferrer”> Python 露比Haskell口齿不清二郎奥卡姆PHP等其他语言的核心库: 我使用过其中的一些,但是我不知道他们使用的是哪个库,或者他们使用的是哪种实现。

我已经知道的是:

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

  2. 使用 int(或者 long int,或者 long long)作为基本的“单元”,使用该类型的数组作为任意长整数,并使用 for循环对元素进行计算。

  3. 使用整数类型将十进制数字(或几个数字)存储为 译自: http://www.wikipedia.org/wiki/2010/09/09/2010/09/09/09/2010/09/09/09/09/2010/09/09/09/09/09/09/09/09/09/09/09/09/09/09/09/

  4. Booth 的乘法算法

我不知道的是:

  1. 以十进制格式打印上面提到的二进制数组,而不使用简单的方法。一个简单方法的例子: (1)从最低位到最高位相加: 1,2,4,8,16,32,... (2)使用上面提到的 char*字符串来存储中间的十进制结果)。

我感激的是:

  1. GMP译自: 美国《每日邮报》网站(http://www.MPFR.org/)原著: http://www.MPFR.org/(http://www.MPFR.org/)原著: http://www.MPFR.org/(http://www.MPFR.org/)DecNumber < a href = “ http://speleotrove.com/decNumber.html”rel = “ noReferrer”> decNumber (或者其他你认为不错的库)进行很好的比较。

  2. 关于我应该读的书和文章的好建议。例如,有关 不幼稚二进制到十进制转换算法如何工作的图表就很好。道格拉斯 · 琼斯的文章《 精度有限的二进制到十进制转换》就是一篇好文章的例子。

  3. 任何帮助。

如果您认为使用 double(或者 long double,或者 long long double)可以很容易地解决这个问题,请 不要回答这个问题。如果你这样认为,你就不明白问题所在。

28360 次浏览

I've not compared arbitrary precision arithmetic libraries to each other myself, but people who do seem to have more or less uniformly settled on GMP. For what it's worth, the arbitrary precision integers in GHC Haskell and GNU Guile Scheme are both implemented using GMP, and the fastest implementation of the pidigits benchmark on the language shootout is based on GMP.

Overall, he fastest general purpose arbitrary precision library is GMP. If you want to work with floating point values, look at the the MPFR library. MPFR is based on GMP.

Regarding native arbitrary precision support in other languages, Python uses its own implementation because of license, code size, and code portability reasons. The GMPY module lets Python access the GMP library.

GMP is the popular choice. Squeak Smalltalk has a very nice library, but it's written in Smalltalk.

You asked for relevant books or articles. The tricky part of bignums is long division. I recommend Per Brinch Hansen's paper Multiple-Length Division Revisited: A Tour of the Minefield.

What about Pari? It’s built on top GMP and provides all the other goodies about number theory operations you’ll ever need (and many symbolic computation stuff).

See TTMath, a small templated header-only library free for personal and commercial use.