1

我正在尝试为两个 256 位操作数的乘法实现 3 级 Karatsuba 乘法。我想使用 radix-2^32 表示我的操作数,因此到目前为止我已经实现了两个 32 位操作数的教科书乘法,我打算在我的 Karatsuba 乘法函数中使用它。只要我知道,我可以将我的操作数划分如下:

level-1 :AB = A0B0 + ((A0 + A1)(B0 + B1) - A0B0 - A1B1)(x^(m/2)) + A1B1(x^m)
level-2 : A0B0 = A00B00 + ((A00 + A01)(B00 + B01) - A00B00 - A01B01)(x^m/2)) + A01B01(x^m)
level-3 : A00B00 = A000B000 + ((A000 + A001)(B000 + B001) - A000B000 - A001B001)(x^(m/2)) + A001B001(x^m)

正如您在此处看到的,A 和 B 有 256 位,而 A000 和 B000 有 32 位,适合我的unit32_t数据类型。正如我之前提到的,我已经为两个 32 位操作数实现了教科书乘法,并且效果很好。这是我的问题,在第 3 级,当我添加两个 32 位操作数 (A000 + A0001) 和 (B000 + B0001) 时,由于进位,我得到了 33 位结果。因此,我应该将两个 33 位操作数相乘并得到 66 位结果,这在我的情况下不打算这样做!那么,我怎样才能只使用uint32_t数据类型表示来实现这个算法呢?

4

0 回答 0