Algorithm 如果硬件已经在做乘法运算,为什么还需要乘法运算?

Algorithm 如果硬件已经在做乘法运算,为什么还需要乘法运算?,algorithm,architecture,Algorithm,Architecture,我正在学习快速整数乘法的算法,我想知道,既然计算机已经在CPU中内置了专用的硬件来执行乘法,为什么需要这种算法 是不是大数字很难乘法,但算法将其分解为更简单的步骤,硬件更容易处理,因为硬件擅长乘法较小的数字?这些算法往往只适用于多精度数字,这实际上对RSA之类的东西很有用。不管它们是否有回报,理论上有兴趣为多精度算法找出最佳算法 当然,硬件也需要设计,人们有时会使用除法算法,这些算法不是教给刚开始算术的孩子们的。Wikipedia建议,这并不完全是高科技。有一些例子建议甚至实际使用牛顿-拉斐逊迭

我正在学习快速整数乘法的算法,我想知道,既然计算机已经在CPU中内置了专用的硬件来执行乘法,为什么需要这种算法


是不是大数字很难乘法,但算法将其分解为更简单的步骤,硬件更容易处理,因为硬件擅长乘法较小的数字?

这些算法往往只适用于多精度数字,这实际上对RSA之类的东西很有用。不管它们是否有回报,理论上有兴趣为多精度算法找出最佳算法


当然,硬件也需要设计,人们有时会使用除法算法,这些算法不是教给刚开始算术的孩子们的。Wikipedia建议,这并不完全是高科技。有一些例子建议甚至实际使用牛顿-拉斐逊迭代法进行除法。

这些算法往往只对多精度数字产生效果,而这些算法实际上对RSA之类的东西有用。不管它们是否有回报,理论上有兴趣为多精度算法找出最佳算法

当然,硬件也需要设计,人们有时会使用除法算法,这些算法不是教给刚开始算术的孩子们的。维基百科建议,这并不完全是高科技。有几个例子建议甚至实际使用牛顿-拉斐逊迭代法进行除法

  • 所有CPU都有固定的ALU/FPU位宽度。

    例如,在i80x86(PC)上,ALU是否仅限于:

    i8086+   16 bit
    i80386+  32 bit
    x64 arch 64 bit
    
    只允许计算多达16/32/64位的数字作为操作数i80x87FPU使用
    80位
    数字表示法,该数字表示法从IEEE转换为IEEE
    float(32位)/double(64位)
    限制精度

  • 如果需要计算具有更大位宽的数字,则HW限制

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

    乘法和除法更复杂,你需要使用长算法(就像你在纸上计算一样),通常是
    O(n^2)
    。其中
    n
    是“位数”。一位数字通常是
    8/16/32/64
    位数字或其最大的
    10^m
    基数字。当你在计算小的数字(高达几个100x位)时,更高级的算法没有任何好处,因为它们有太多的开销。对于更大的数字,情况变得有利于他们。见:

    计算大的浮点数是一件棘手的事情,通常在整数算术ALU上比在FPU上更快地完成。但在某些情况下,如果您将值分解为更多变量,例如,在求和/积分时提高精度,您仍然可以受益于FPU,请参见:

    • 特别是最后一次编辑
  • 所有CPU都有固定的ALU/FPU位宽度。

    例如,在i80x86(PC)上,ALU是否仅限于:

    i8086+   16 bit
    i80386+  32 bit
    x64 arch 64 bit
    
    只允许计算多达16/32/64位的数字作为操作数i80x87FPU使用
    80位
    数字表示法,该数字表示法从IEEE转换为IEEE
    float(32位)/double(64位)
    限制精度

  • 如果需要计算具有更大位宽的数字,则HW限制

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

    乘法和除法更复杂,你需要使用长算法(就像你在纸上计算一样),通常是
    O(n^2)
    。其中
    n
    是“位数”。一位数字通常是
    8/16/32/64
    位数字或其最大的
    10^m
    基数字。当你在计算小的数字(高达几个100x位)时,更高级的算法没有任何好处,因为它们有太多的开销。对于更大的数字,情况变得有利于他们。见:

    计算大的浮点数是一件棘手的事情,通常在整数算术ALU上比在FPU上更快地完成。但在某些情况下,如果您将值分解为更多变量,例如,在求和/积分时提高精度,您仍然可以受益于FPU,请参见:

    • 特别是最后一次编辑
  • 如果硬件已经在做乘法运算,为什么还需要乘法运算

    因为硬件还没有做到这一点。硬件最多只能执行64位或128位乘法。你提到的Karatsuba算法直到你有了更大数量级的数字才开始有用

    如果硬件已经在做乘法运算,为什么还需要乘法运算

    因为硬件还没有做到这一点。硬件最多只能执行64位或128位乘法。Karatsuba算法