如果硬件已经实现,为什么需要乘法算法呢?

时间:2016-02-03 05:09:38

标签: algorithm architecture

我正在学习快速整数乘法的Karatsuba algorithm,并且想知道,因为计算机已经有内置在CPU中的专用硬件来进行乘法,为什么这个算法是必要的呢?

大数字难以成倍增加,但算法会将其分解为更容易让硬件处理的简单步骤,因为硬件擅长将较小的数字相乘吗?

3 个答案:

答案 0 :(得分:2)

  1. 所有CPU都有固定的ALU / FPU位宽。

    例如 i80x86 (PC)是ALU限于:

    i8086+   16 bit
    i80386+  32 bit
    x64 arch 64 bit
    

    允许仅计算最多16/32/64位数作为操作数。 i80x87 FPU使用80 bit数字表示形式,从 float(32bit)/double(64bit)转换为限制精度。

  2. 如果您需要计算更大位宽的数字,那么硬件限制

    然后你需要将其分解为 ALU / FPU 上可计算的块(并将它们作为数字的数字处理)并将它们的结果组合到最终值。 ALU正在计算这个,这就是为什么CPU有Carry标志和ALU支持添加和使用carry进行减法的原因。现在,如果您正在执行简单的+/-,那么您只需添加/从最低(LSW)到最高(MSW)的所有数字传播进位。见:

    乘法和除法更复杂,您需要使用通常为O(n^2)的长算法(如纸上计算)。其中n是"数字"的数量。一位数通常是8/16/32/64位数或其最大10^m基数。当你计算小数字(最多几个100x位)时,没有更高级算法的增益,因为它们有太多的开销。对于更大的数字,情况转而支持他们。见:

    计算大浮点数是很棘手的,通常在整数算术 ALU 上更快,而不是在 FPU 中更快。但是在某些情况下,如果你将值分解为更多变量,例如为了提高求和/积分时的准确性,你可以从 FPU 中受益:

答案 1 :(得分:1)

这些算法往往只能为多精度数字付出代价 - 实际上这些数字用于RSA之类的东西。无论它们是否得到回报,理论上都有兴趣制定出多精度算法的最佳算法。

当然,硬件也需要设计,人们有时会使用分割算法,这些算法不是那些开始算术的孩子。维基百科建议https://en.wikipedia.org/wiki/Division_algorithm#SRT_division,这不是高科技。有一些提议甚至实际使用Newton-Raphson迭代进行划分的例子。

答案 2 :(得分:1)

  

如果硬件已经存在,为什么需要乘法算法呢?

因为硬件还没有这样做。硬件最多只能进行64位或128位乘法运算。您提到的Karatsuba算法在您的数字大了许多个数量级之前不会开始有用。