是否有任意精度算术的通用实现策略,无论特定语言如何都是有效的?

时间:2011-10-24 15:59:09

标签: algorithm math language-agnostic biginteger

我正在考虑实现任意精度算术的不同方法(有时称为Bignum,Integer或BigInt)。

似乎常见的习惯用法是使用数组存储实际值,并在空间需求增加或缩小时根据需要重新分配。

更确切地说,似乎数组元素的位大小通常是通常支持的第二大大小(以便更容易实现溢出计算?),e。 G。语言/平台支持128位大小的数字 - > 64位数字+ 128位变量数组,用于处理溢出。

实现任意精度算术是否存在根本不同的方法,或者上面是“尝试和真实”的方法来实现它而没有巨大的性能损失?

我的问题是关于底层数据结构,而不是操作算法。我知道Karatsuba,Toom-Cook等。

1 个答案:

答案 0 :(得分:10)

可以使用Chinese Remainder Theoremrepresent large integers,与通常的base-2 ^ n系统完全不同。

我相信基于CRT的表示仍将使用一系列元素,这些元素与传统表示一样,基于最方便的本机算法。但是,这些元素在除以素数序列时保留数字的余数,而不是基数为2 ^ n的数字。

与传统表示一样,使用的元素数量决定了可表示数字的最大大小。不幸的是,计算一个基于CRT的数字是否大于另一个数字并不容易,因此很难判断您的表示是否溢出了最大大小。请注意,在CRT表示中加法和乘法非常快,如果您可以处理溢出问题,这可能是一个优势。

然而,回答你的问题:我认为,确定base-2 ^ n系统确实是“经过验证的”表示是准确的,这是大多数流行的bignum图书馆使用的。我想我记得有现存的基于CRT的bignum图书馆,虽然我最近没有检查过它们是否仍然存在......