有没有C语言中的可靠大整数实现?

5

我正在处理一个项目,需要精确计算大整数(例如3^361),并尽可能快地进行计算。 C是我熟悉的最快速的语言,因此我试图用这种语言编写我的解决方案。

问题在于,除了Python的源代码外,我没有找到任何好的数据类型实现来表示C中无限整数。我需要花费时间去查看代码并确定我所需要的内容。

我宁愿使用其他人测试过的代码,其中包括完整的功能集合(加法,减法,乘法,除法,取模,指数运算,相等性检查...甚至位运算也很好),而不是花费几周时间才能开始编写自己的版本。虽然这将是一个很好的学习经验,但它不是我的问题的重点,我更愿意进入我感兴趣的部分 :)

7个回答

4

已经有几个人提到了GMP。我只想补充一点,至少在我上次查看时,它基本上只能与gcc配合使用。

如果您想使用其他编译器,您可能考虑的是NTLMIRACL。我对MIRACL进行了一些测试,似乎工作得相当不错。我更多地使用了NTL,虽然大整数更像是它的副业,但它仍然可以很好地处理它们。它并不声称像GMP那样快(实际上,它可以使用GMP来执行基本操作),但当我在两者之间进行了一些最小化基准测试时,我没有发现太多显着的差异(尽管那是很久以前的事情,我怀疑它是否仍然有效)。


3

Gnu MP 提供了一个高精度计算库。


我选择这个作为答案,因为最终我能够最轻松地使用GMP库。谢谢你让我知道它。 - sadakatsu

3

OpenSSL库还提供了一个可靠的BigNum实现(<openssl/bn.h>)。


3

我使用MAPM,它是一种便携式的任意精度(整数和浮点数)库。


3

来自libtomcrypt的libtommath可能是最小、最简单、最快速的。有趣的是,这三个最高级形容词几乎总是同时出现...如果你找不到上游代码库,你可以从dropbear ssh源码树中获取源代码。


Tcl 8.5(及更高版本)包含libtommath。 - Donal Fellows
我也推荐使用libtommath和libtomcrypt。 - pasztorpisti

2
如果你需要 ANSI 标准的 C 代码,可以在 Dave Hanson 的 C Interfaces and Implementations 中获取。非常清晰和设计良好。
如果 gcc 和 gcc 扩展可行,那么就像其他人指出的那样,Gnu 多精度库 (GMP) 得到了广泛使用和好评。

0

Mbed有一个bignum实现,作为加密功能的基础。

它在微控制器上被广泛使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接