我在寻找一个好任意的精确数学的图书馆C或C++。能不能请你给我一些意见/建议吗?

主要的要求:

  1. 它的 必须 处理意大整数(我的主要兴趣是在整数)。在情况,你不知道这个词是什么意大意味着,想象一下像100000!(因子的100000).
  2. 精密 必须不需要 被指定在库初始化/创建的对象。精确应该 受到可用资源的系统。
  3. 它的 应该 利用充分权力的平台,并应处理"小"数字本身。这意味着在64位平台,计算2^33+2^32应该使用可用的64位CPU说明。图书馆 不应该 计算这种相同的方式,因为它不会有2^66+2^65上相同的平台。
  4. 它的 必须 处理外的(+)、减(-),乘(*),整数分(/),其余部分(%)、电(**)、递增(++),减量(--),gcd(),因子(),和其他的共同的整数的算术计算效率。能力来处理功能,如sqrt()(平方根)、日志()(数),没有产生结果的整数。能力来处理 象征性的计算 甚至更好。

这里是我发现了什么迄今为止:

  1. Java's BigIntegerBigDecimal 级:我一直在使用这些为止。我已经阅读的源代码,但是我不理解数学。它可以根据理论/算法,我从来没有学会。
  2. 内置在整数类型或中心的图书馆 bc / 蟒蛇 / 红宝石 / Haskell / 口齿不清 / 二郎 / OCaml / PHP /一些其他语言:我曾经使用过这些,但我不知道在其图书馆,他们使用的,或者哪种类型的执行他们使用。

我已经众所周知的:

  1. 使用 char 作为一位小数的数字,和一个 char* 作为一个小数字符串而做的计算数字使用一个循环。
  2. 使用 int (或 长int, 或 长长的)作为一项基本"单位"和一系列其作为任意的长期整数,计算元件上使用一个循环。
  3. 使用一个整数类型的商店一个小数位数的(或几个数字)为 碱性催化分解工艺(二进制编码小数).
  4. 展台的乘法运算法

什么我不知道:

  1. 印刷的二进制数组提到上述在小数没有使用天真的方法。例的幼稚的方法:(1)增加一位从最低到最高:1, 2, 4, 8, 16, 32, ...(2)使用 char* 串上面提到的储存中间的十进制的结果)。

我的理解:

  1. 好的比较 GMP, 这三个库, decNumber (或其他图书馆是很好的在你的意见).
  2. 很好的建议书/文章,我应该阅读。例如,图上的数字如何 联合国的天真 二十进制转换算法的工作是良好的。该文章 "二十进制转换,在有限的精度" 道格拉斯*W*琼斯是一个例子的一个很好的文章。
  3. 任何帮助。

不不 回答这个问题,如果:

  1. 你认为使用一个 (或 只要双倍, 或 长长的双)可以解决这个问题很容易。如果你不这么认为的,这意味着你不了解这个问题在讨论中。
有帮助吗?

解决方案

GMP是受欢迎的选择。吱一般具有非常好的图书馆,但是它被写在一般.

你问的有关的书籍或文章。棘手的一部分bignums长部门。我建议每Brinch汉森的纸 多长分Revisited:一个旅游的雷区.

其他提示

总体而言,他最快的一般性目的的任意的精确库 GMP.如果你想要工作中与浮点值,看看的 这三个库 图书馆。这三个库是根据GMP。

关于当地任意的精确度支持的其他语言,Python使用其自己的实现,因为许可代码尺寸,并代码的便携性的原因。的 GMPY 模块可以让Python访问GMP library.

casevh

看看 http://ttmath.org

小型模板的头-只有图书馆免费的个人和商业使用。

我不相比,任意精算术库彼此我自己,但人们似乎已经或多或少地均匀地解决GMP。为什么它的价值、任意的精确度在整数GHC Haskell和GNU诡计的方案都实施使用GMP,并以最快的执行情况 pidigits基准的语言枪战 基于GMP。

什么帕里?它是建立在GMP和提供的所有其他东西关于一些理论操作的,你永远需要(和许多象征性的计算的东西).

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top