Questions tagged «arithmetic-division»

6
为什么硬件除法比乘法要花更长的时间?
为什么硬件除法要比微控制器上的乘法花费更多的时间?例如,在dsPIC上,除法需要19个周期,而乘法仅需要一个时钟周期。 我浏览了一些教程,包括Wikipedia上的除法算法和乘法算法。这是我的理由。 像在Wikipedia 上恢复的慢速除法一样,除法算法也是一种递归算法。这意味着step的(中间)结果k用作step 的输入k+1,这意味着这些算法无法并行化。因此,n完成分割至少需要花费周期,而n被除数中的位数是很多。对于16位除数,这至少等于16个周期。 乘法算法不需要递归,这意味着可以并行化它。但是,有许多不同的乘法算法,我不知道微控制器可以使用哪种算法。乘法在硬件/微控制器上如何工作? 我发现了一种Dadda乘法器算法,该算法只需要一个时钟周期即可完成。但是,我没有得到的是Dadda的算法分三步进行,而步骤1的结果用于步骤2,依此类推。因此,这至少需要三个时钟周期才能完成。


10
AVR的有效逆(1 / x)
我试图找到一种有效的方法来计算AVR上的逆(或近似)。 我正在尝试计算步进电机的脉冲周期,以便可以线性地改变速度。周期与速度(p = K/v)的倒数成正比,但我想不出一种快速计算此速度的好方法。 我的公式是 p = 202/v + 298; // p in us; v varies from 1->100 在Arduino上测试时,似乎完全忽略了该部分,而将其p固定为固定298(尽管在avr-gcc中可能会有所不同)。我还尝试过对v循环求和,直到超过202,然后对循环计数,但这非常慢。 我可以生成一个查找表并将其存储在闪存中,但是我想知道是否还有另一种方法。 编辑:也许标题应该是“有效划分” ... 更新:正如pingswept指出的那样,我将周期映射到速度的公式不正确。但是主要的问题是除法运算。 编辑2:在进一步调查中,除法在arduino上起作用,问题是由于上面的公式不正确以及其他地方的int溢出。

10
获得整数mod 10和整数除数10的最快方法?
如果硬件不支持模数或除法运算,则需要更多的CPU周期来通过软件模拟模数/除法。如果操作数为10,有没有更快的方法来计算除法和模数? 在我的项目中,我经常需要计算整数模数10。特别是,我正在PIC16F上工作,需要在LCD上显示一个数字。有4位数字可支持,因此对模数和除法功能(软件实现)有4个调用。也就是说,如下所示: digit = number % 10; // call to an expensive function number /= 10; // call to an expensive function somehow_lit_segments(); digit = number % 10; // call to an expensive function number /= 10; // call to an expensive function somehow_lit_segments(); digit = number % 10; // …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.