C中是否有任何可靠的大整数实现?

时间:2010-07-06 23:52:54

标签: c integer

我正在开发一个项目,我需要以绝对精度和尽可能快的速度处理大整数(如3 ^ 361)。 C是我熟悉的最快的语言,所以我试图用这种语言编写我的解决方案。

问题在于我无法找到任何数据类型的良好实现来表示C语言中除Python源代码之外的无限整数。我花了一些时间来完成代码并确定我需要的东西。

我宁愿使用其他人的测试代码,其中包含一整套功能(加法,减法,乘法,除法,调制,取幂,等式检查......甚至按位运算都会很好),而不是花费几周的时间。我甚至开始让我自己的版本达到标准杆。虽然这将是一个很好的学习经历,但它不是我的问题的焦点,我宁愿到达我感兴趣的部分:)

7 个答案:

答案 0 :(得分:4)

有几个人已经提到过GMP。我只会添加至少我最后一次看,它非常适合使用gcc。

如果您想使用其他编译器,可能会考虑使用NTLMIRACL。我对MIRACL进行了一些测试,看起来效果相当不错。我已经使用了相当多的NTL,虽然大整数更多的是它的副业,但它仍然很好地完成它们。它声称没有GMP那么快(实际上,可以使用GMP进行基本操作),但是当我在两者之间做了一些最小的基准测试时,我没有发现很多重大差异(尽管那个很久以前,我怀疑它已经有效了。)

答案 1 :(得分:3)

Gnu MP提供了一个bignum图书馆。

答案 2 :(得分:3)

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

答案 3 :(得分:3)

我使用MAPM这是一个可移植的任意精度(整数和浮点)库。

答案 4 :(得分:3)

来自libtomcrypt的libtommath可能是最小,最简单,最快的。 (有趣的是,这3个最高级的几乎总是聚集在一起......)如果找不到上游,你可以从dropbear ssh源代码树中获取源代码。

答案 5 :(得分:2)

如果您想要ANSI Standard C,请在Dave Hanson的C Interfaces and Implementations中获取代码。非常清晰,设计精良。

如果gcc和gcc扩展正常,那么正如其他人指出的那样,Gnu Multiprecision Library(GMP)已被充分考虑并广泛使用。

答案 6 :(得分:0)

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

它在微控制器上大量使用。