最好的交叉平台(便携式)任意的精确数学的图书馆[封闭]
-
24-09-2019 - |
题
我在寻找一个好任意的精确数学的图书馆C或C++。能不能请你给我一些意见/建议吗?
主要的要求:
- 它的 必须 处理意大整数(我的主要兴趣是在整数)。在情况,你不知道这个词是什么意大意味着,想象一下像100000!(因子的100000).
- 精密 必须不需要 被指定在库初始化/创建的对象。精确应该 只 受到可用资源的系统。
- 它的 应该 利用充分权力的平台,并应处理"小"数字本身。这意味着在64位平台,计算2^33+2^32应该使用可用的64位CPU说明。图书馆 不应该 计算这种相同的方式,因为它不会有2^66+2^65上相同的平台。
- 它的 必须 处理外的(+)、减(-),乘(*),整数分(/),其余部分(%)、电(**)、递增(++),减量(--),gcd(),因子(),和其他的共同的整数的算术计算效率。能力来处理功能,如sqrt()(平方根)、日志()(数),没有产生结果的整数。能力来处理 象征性的计算 甚至更好。
这里是我发现了什么迄今为止:
- Java's BigInteger 和 BigDecimal 级:我一直在使用这些为止。我已经阅读的源代码,但是我不理解数学。它可以根据理论/算法,我从来没有学会。
- 内置在整数类型或中心的图书馆 bc / 蟒蛇 / 红宝石 / Haskell / 口齿不清 / 二郎 / OCaml / PHP /一些其他语言:我曾经使用过这些,但我不知道在其图书馆,他们使用的,或者哪种类型的执行他们使用。
我已经众所周知的:
- 使用 char 作为一位小数的数字,和一个 char* 作为一个小数字符串而做的计算数字使用一个循环。
- 使用 int (或 长int, 或 长长的)作为一项基本"单位"和一系列其作为任意的长期整数,计算元件上使用一个循环。
- 使用一个整数类型的商店一个小数位数的(或几个数字)为 碱性催化分解工艺(二进制编码小数).
- 展台的乘法运算法
什么我不知道:
- 印刷的二进制数组提到上述在小数没有使用天真的方法。例的幼稚的方法:(1)增加一位从最低到最高:1, 2, 4, 8, 16, 32, ...(2)使用 char* 串上面提到的储存中间的十进制的结果)。
我的理解:
- 好的比较 GMP, 这三个库, decNumber (或其他图书馆是很好的在你的意见).
- 很好的建议书/文章,我应该阅读。例如,图上的数字如何 联合国的天真 二十进制转换算法的工作是良好的。该文章 "二十进制转换,在有限的精度" 道格拉斯*W*琼斯是一个例子的一个很好的文章。
- 任何帮助。
请 不不 回答这个问题,如果:
- 你认为使用一个 双 (或 只要双倍, 或 长长的双)可以解决这个问题很容易。如果你不这么认为的,这意味着你不了解这个问题在讨论中。
解决方案
GMP是受欢迎的选择。吱一般具有非常好的图书馆,但是它被写在一般.
你问的有关的书籍或文章。棘手的一部分bignums长部门。我建议每Brinch汉森的纸 多长分Revisited:一个旅游的雷区.
其他提示
小型模板的头-只有图书馆免费的个人和商业使用。
我不相比,任意精算术库彼此我自己,但人们似乎已经或多或少地均匀地解决GMP。为什么它的价值、任意的精确度在整数GHC Haskell和GNU诡计的方案都实施使用GMP,并以最快的执行情况 pidigits基准的语言枪战 基于GMP。
什么帕里?它是建立在GMP和提供的所有其他东西关于一些理论操作的,你永远需要(和许多象征性的计算的东西).
不隶属于 StackOverflow