【问题标题】:How does the modulus operator in java function?java中的模运算符是如何工作的?
【发布时间】:2013-04-02 00:47:16
【问题描述】:

我即将开始对大量代码进行优化,我需要确切知道在使用模运算符时执行了哪些操作。我已经搜索了很长时间,但我找不到任何关于它背后的机器代码的信息。有什么想法吗?

【问题讨论】:

标签: java function modulus machine-code


【解决方案1】:

如果你需要知道

当使用取模运算符时,究竟执行了哪些操作

那么我建议你“做错了”。

Modulus 可能因操作系统和底层架构而异。它可能会有所不同,也可能不会,但如果您需要依赖实施,您的时间可能最好花在其他地方。不保证实现保持不变,或在不同机器之间保持一致。

为什么您认为模数是计算的主要来源?无论其实现如何,该操作很可能是一个常数 - 即,如果它在一个大 O 大于常数时间的算法中运行,则首先优化该算法。

问问自己为什么需要优化。计算时间是否(显着)长于预期?

然后问问自己 90 - 99% 的计算都花在了哪里。尝试使用分析器获取数字,即使您认为自己知道时间花在了哪里。它可能会为您提供线索或阐明错误。

【讨论】:

    【解决方案2】:

    大多数平台都内置了整数模运算符。执行一个时序与除法相当的指令,产生模数。

    编译器可以对除数的二次幂进行优化:编译器可以使用可能更快的x & 0x01FF,而不是对x % 512 进行模运算。

    【讨论】:

    • @harold 你是对的,这与所需要的相反。谢谢!
    【解决方案3】:

    有什么想法吗?

    是的,不要在这上面浪费时间。除了试图在自己的工作中击败编译器之外,还有其他一些代码可以改进得更多

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-03
      • 2014-01-17
      • 2016-10-25
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多