为什么浮点加法比乘法花费更长的时间

Why does floating point addition took longer than multiplication

我正在使用 PIC18f4550,该程序对速度至关重要。当我将两个浮动变量相乘时,PIC 需要大约 140 个周期来执行乘法。我正在用 PIC18f4550 timer1 测量它。

variable_1 = variable_2 * variable_3; // took 140 cycles to implement

另一方面,当我添加相同的两个变量时,PIC 需要 280 个周期来执行添加。

variable_1 = variable_2 + variable_3; // took 280 cycles to implement

我已经看到,如果变量的变化取决于它们的指数,则循环数会发生变化。 那些更多周期的原因是什么?虽然我认为加法比乘法更简单。 有什么解决办法吗?

对于浮点加法,需要调整操作数,使它们在加法之前具有相同的指数,这涉及跨字节边界移动尾数之一,而乘法基本上是将尾数相乘并添加指数。

由于 PIC 显然有一个小的硬件乘法器,所以有时乘法比进行多字节移位更快(尤其是当 PIC 只有一位移位指令时)就不足为奇了。

除非处理器直接支持浮点,否则浮点总是很慢,如果可能的话,您当然应该考虑安排您的代码使用定点。摆脱浮点库可能也会释放大量代码 space。