最近,我听说%运营商的时间成本很高。
所以,问题是,有没有办法更快地找到余数?
如果有人能分辨出%/ * + - 操作的执行情况,我们也将不胜感激。
答案 0 :(得分:0)
不,编译器将以最有效的方式实现%。
就速度而言,+和 - 是最快的(同样快速,通常由相同的硬件完成)。
*,/和%慢得多。乘法基本上是通过您在小学阶段学习的方法完成的 - 将第一个数字乘以第二个数字中的每个数字并添加结果。通过二进制可以实现一些黑客攻击。截至几年前,乘法比增加慢3倍。分区应该类似于倍增。余数类似于除法(实际上它通常一次计算两者)。
确切的差异取决于CPU类型和确切的模型。您需要查找特定计算机的CPU规格表中的延迟。
答案 1 :(得分:0)
在某些使用2次幂除数的情况下,您可以使用自己动手来计算余数的方法做得更好,但通常情况下,中等体面的编译器可以使用可变除数来做到最好,或者“奇怪的“除数不适合任何模式。
请注意,有些CPU甚至没有乘法运算,因此(在那些上)乘法相对于add非常慢(对于32位乘法至少为64x)。 (但是如果乘数是文字的话,智能编译器可能会对此进行改进。)稍大一些的数字没有除法运算或者速度很慢。 (在具有快速乘法器乘法的CPU上,可能仅比加法的速度慢4倍,但在“普通”硬件上,对于32位操作,它的速度要慢16-32倍。分频本身比乘法慢2-4倍,但在某些硬件上可能会慢很多。)
其余操作很少在硬件中实现,通常A % B
映射到A - ((A / B) * B)
行的某些内容(可能需要一些额外的操作来确保正确的符号等)。 / p>
(我在70年代早期对SUMC computer for RCA/NASA的指令集进行微程序设计时了解了这些内容。)