Algorithm 对于任意精度的算法,是否有通用的实现策略,这些策略在不考虑特定语言的情况下都是有效的?

Algorithm 对于任意精度的算法,是否有通用的实现策略,这些策略在不考虑特定语言的情况下都是有效的?,algorithm,math,language-agnostic,biginteger,Algorithm,Math,Language Agnostic,Biginteger,我正在考虑实现任意精度算术(有时称为Bignum、Integer或BigInt)的不同方法 似乎常见的习惯用法是使用数组存储实际值,并在空间需求增加或减少时根据需要重新分配 更准确地说,似乎数组元素的位大小通常是通常支持的第二大大小(使溢出计算更容易实现?),例如。G语言/平台支持128位大小的数字->64位数字数组+128位变量来处理溢出 是否有根本不同的方法来实现任意精度的算法,或者上述方法是“经过验证的”方法来实现它而不会造成巨大的性能损失 我的问题是关于底层数据结构,而不是操作的算法。我

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

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

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

是否有根本不同的方法来实现任意精度的算法,或者上述方法是“经过验证的”方法来实现它而不会造成巨大的性能损失

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

使用to的方式可能与通常的base-2^n系统有根本不同

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

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


但是,为了回答您的问题:我认为可以准确地说base-2^n系统确实是“经过验证的”表示法,大多数流行的bignum库都使用这种表示法。我想我记得有现存的基于CRT的bignum库,尽管我最近没有检查它们是否仍然存在……

对于大整数,我认为使用FFT和DFT。为了效率(进位传播),bignum通常以小端方式存储为二进制数组。数组元素的大小确实与计算机处理数字以获得进位(用于加法)或借位(用于减法)的能力有关。特定于编程语言,保存bignum的数组可以是字节数组,因为字节可以很容易地转换为最有效的数据类型。4字节到整数,8字节到长等等。实际上,对于加法和减法,可以使用本机位长度。如果有进位,
a+b
a-b>a
用于正整数。但在乘法中处理溢出是相当棘手的。可行,但最好由CPU决定。:)+1、基于CRT的表示法是一些基于数论变换(NTT)的乘法算法的内部表示法。