我并没有真正尝试优化任何东西,但我记得我一直从程序员那里听到这个,我认为这是一个事实。毕竟他们应该知道这些东西。
但我想知道为什么除法实际上比乘法慢?除法不只是一种美化的减法,而乘法是一种美化的加法吗?所以从数学上讲,我不明白为什么走一种方式或另一种方式在计算上会有非常不同的成本。
任何人都可以澄清这个原因/原因,所以我知道,而不是我从其他程序员那里听到的我之前问过的是:“因为”。
我并没有真正尝试优化任何东西,但我记得我一直从程序员那里听到这个,我认为这是一个事实。毕竟他们应该知道这些东西。
但我想知道为什么除法实际上比乘法慢?除法不只是一种美化的减法,而乘法是一种美化的加法吗?所以从数学上讲,我不明白为什么走一种方式或另一种方式在计算上会有非常不同的成本。
任何人都可以澄清这个原因/原因,所以我知道,而不是我从其他程序员那里听到的我之前问过的是:“因为”。
但我想知道为什么除法实际上比乘法慢?除法不只是一种美化的减法,而乘法是一种美化的加法吗?
最大的区别在于,在长乘法中,您只需在移位和屏蔽后将一堆数字相加。在长除法中,您必须在每次减法后测试溢出。
让我们考虑两个 n 位二进制数的长乘法。
但是,如果我们仔细观察,我们可以通过使用两个技巧来优化加法(还有进一步的优化,但这些是最重要的)。
所以现在我们的算法看起来像
换句话说,我们可以为两个 n 位数构建一个乘法器,时间与 n 大致成正比(空间与 n² 大致成正比)。只要 CPU 设计者愿意献身,逻辑乘法几乎可以和加法一样快。
在长除法中,我们需要知道每个减法是否溢出,然后才能决定下一个使用什么输入。所以我们不能应用与长乘法相同的并行技巧。
有一些除法方法比基本的长除法更快,但它们仍然比乘法慢。