一尘不染

为什么浮法运算速度慢?

algorithm

算法中执行浮点除法的步骤是什么?

为什么结果比乘法慢?

它和我们手工分割的方式一样吗?通过反复除以除数,将结果相减得到余数,再次对齐数字,直到余数小于特定值为止。

另外,如果不这样做,为什么我们会提高性能

a = b / c

我们的确是

d = 1 / c
a = b * d

编辑:基本上我在问,因为有人要求我根据权重分配在竞争者之间分配值。我用整数来完成所有这些操作,后来被要求转换为float,这导致性能下降。我只是想知道C或C
++如何执行这些会导致运行缓慢的操作。


阅读 225

收藏
2020-07-28

共1个答案

一尘不染

从硬件的角度来看,划分是一种迭代算法,花费的时间与位数成正比。当前最快的除法使用radix4算法,该算法每次迭代生成4位结果。对于32位除法,您至少需要8个步骤。

乘法可以并行进行到一定程度。无需赘述,您可以将大型乘法分解为几个较小的独立乘法。这些乘法可以再次分解,直到您处于位级别,或者您可以更早停止并在硬件中使用小的查询表。从硅房地产的角度来看,这使得乘法硬件很重,但也非常快。这是经典的尺寸/速度折衷。

您需要log2步骤来组合并行计算的结果,因此32位乘运算需要5个逻辑步骤(如果您降低到最小值)。幸运的是,这5个步骤比除法步骤要简单得多(仅仅是添加步骤)。这意味着实际上乘数甚至更快。

2020-07-28