我正在尝试实现3级Karatsuba乘法,以便将两个256位操作数相乘。我想使用我的操作数的radix-2 ^ 32表示,因此到目前为止我已经实现了两个32位操作数的教科书乘法,我打算在我的Karatsuba乘法函数中使用它。只要我知道,我可以按照以下方式划分我的操作数:
form.cleaned_data
正如您在这里看到的,A和B具有256位,而A000和B000具有32位,这恰好适合我的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)
数据类型。正如我之前提到的,我已经为两个32位操作数实现了教科书乘法,并且它工作正常。这是我的问题,在第3级,当我添加两个32位操作数(A000 + A0001)和(B000 + B0001)时,由于进位,我得到了33位结果。因此,我应该将两个33位操作数相乘并获得66位结果,这在我的情况下并不适用!那么,如何仅使用unit32_t
数据类型表示来实现此算法?