我在C或C++中寻找一个好的任意精确的数学库.你能给我一些建议吗?
主要要求:
-
它能处理must个任意大的整数,我的主要兴趣是整数.如果你不知道"任意大"这个词的意思,想象一下10万吧!(must000的阶乘).
-
在库初始化或对象创建期间指定的精度must not need.精度应受到系统可用资源的限制.
-
它should利用平台的全部功能,并应在本地处理"小"数字.这意味着在64位平台上,计算(2^33+2^32)应该使用可用的64位CPU指令.库should not的计算方法与在同一平台上计算(2^66+2^65)的方法相同.
-
它可以有效地处理加法(
+
)、减法(-
)、乘法(*
)、整数除法(/
)、余数(%
)、幂(**
)、增量(++
)、减量(--
)、GCD、阶乘和其他常见的整数算术计算.处理不产生整数结果的平方根和对数等函数的能力是一个优势.处理symbolic computations的能力甚至更好.
以下是我到目前为止的发现:
-
Java的100级和101级:到目前为止我一直在用这些.我读过源代码,但我不懂下面的数学.它可能是基于我从未学过的理论和算法.
-
内置的整数类型或在100、101、Ruby、Haskell、Lisp、Erlang、OCaml、PHP等语言的核心库中:我用过其中的一些语言,但我不知道它们使用的是哪个库,或者它们使用的是哪种实现.
我已经知道的是:
-
使用
char
表示十进制数字,char*
表示十进制字符串,并使用for
循环对数字进行计算. -
使用
int
(或long int
或long long
)作为基本"单位",将该类型的数组作为任意长整数,并使用for
循环对元素进行计算. -
使用整数类型将小数位(或几位)存储为100.
-
100
我不知道的是:
- 在不使用朴素方法的情况下,以十进制打印上述二进制array.一个简单的方法示例:(1)从最低位到最高位相加:1,2,4,8,16,32,…(2)使用上面提到的
char*
个字符串来存储中间小数结果).
我欣赏的是:
-
对100、101、102(或其他你认为不错的库)进行了很好的比较.
-
关于我应该阅读的书籍和文章的好建议.例如,用数字说明non-naive二进制到十进制转换算法的工作原理就很好了.道格拉斯·W·琼斯的文章《100》就是一篇好文章的例子.
-
总的来说有什么帮助吗.
如果你认为使用double
(或long double
或long long double
)可以轻松解决这个问题,请回答这个问题.如果你真的这么认为,那你就不理解这个问题.