0

最近听说 % 算子在时间上很费钱。

所以,问题是,有没有办法更快地找到余数?

如果有人能说出执行 % / * + - 操作的区别,您的帮助也将不胜感激。

4

2 回答 2

0

不,编译器将以最有效的方式实现 % 。

就速度而言,+ 和 - 是最快的(并且同样快,通常由相同的硬件完成)。

*、/ 和 % 慢得多。乘法基本上是通过您在小学学习的方法完成的-将第一个数字乘以第二个数字中的每个数字,然后将结果相加。通过二进制实现一些黑客攻击。几年前,乘法比加法慢 3 倍。除法应该类似于乘法。余数类似于除法(实际上它通常同时计算两者)。

确切差异取决于 CPU 类型和确切型号。您需要在特定机器的 CPU 规格表中查找延迟。

于 2013-08-24T09:57:27.100 回答
0

在某些情况下,如果您使用 2 的幂除数,您可以使用自己的计算余数技术做得更好,但通常一个中等体面的编译器将使用变量除数或“奇数”除数做最好的工作不符合任何模式。

请注意,一些 CPU 甚至没有乘法运算,因此(在那些上)乘法与加法相比非常慢(32 位乘法至少为 64 倍)。(但如果乘数是文字,智能编译器可能会对此进行改进。)稍大的数字没有除法运算或非常慢的运算。(在具有快速乘法器的 CPU 上,乘法可能只比加法慢 4 倍,但在“普通”硬件上,它对于 32 位运算要慢 16-32 倍。除法本质上比乘法慢 2-4 倍,但在某些硬件上可能会慢得多。)

余数运算很少在硬件中实现,通常A % B映射到类似的东西A - ((A / B) * B)(可能需要一些额外的操作来确保正确的符号等)。

(我在 70 年代初为 RCA/NASA 的 SUMC 计算机的指令集进行微编程时了解了这些东西。)

于 2013-08-24T12:55:08.897 回答