Joa*_*nge 36 performance cpu-architecture multiplication division
我并不是真的想要优化任何东西,但我记得我一直都是从程序员那里听到的,我把它当作一个真理.毕竟他们应该知道这些东西.
但我想知道为什么除法实际上比乘法慢?分裂只是一个美化的减法,乘法是一个美化的加法吗?所以在数学上我不明白为什么一种方式或另一种方式在计算上有非常不同的成本.
任何人都可以澄清这个的原因/原因所以我知道,而不是我从其他程序员那里听到的,我之前询问的是:"因为".
但是我不知道为什么除法实际上比乘法慢?除法不仅是光荣的减法,而乘法是光荣的加法吗?
最大的区别是,在长乘法中,您只需要在移位和屏蔽后累加一堆数字即可。在长除法中,每次减法后必须测试溢出。
让我们考虑两个n位二进制数的长乘法。
但是,如果我们仔细观察,结果发现我们可以使用两个技巧来优化加法(还有进一步的优化,但这是最重要的)。
所以现在我们的算法看起来像
换句话说,我们可以在时间上为两个n位数字建立一个与n大致成比例的乘数(而空间与n²大致成比例)。只要CPU设计人员愿意献身于逻辑乘法,它的速度几乎可以与加法一样快。
在长除法中,我们需要确定每个减法是否溢出,然后才能决定对下一个减法使用什么输入。因此,我们不能像长乘法那样应用相同的并行技巧。
有些除法比基本的长除法快,但比乘法慢。