java - 用整数乘法和取模改进表达式

标签 java optimization integer bit-manipulation modulo

有没有办法,我可以写下一行,比当前表达式更有效?

Math.abs(((a*k + b) % P) % m);  

P 是常数素数
m 是非负数,是 2 的幂
ab 是随机非负数

注意:需要说明的是,这不是我在分析过程中发现的热点,我想要改进。我的兴趣是寻找是否有一种方法可以更好地编写表达式(在效率方面),例如,在位操作方面具有更好背景的人可能很容易知道。

最佳答案

要总结评论链,您可以这样写

(a * k + b) % P & (m - 1)

等同于原始表达式,但无论如何满足相同的要求。它以不同的方式处理 a * k + b 为负数的情况(因为 k 为负数或因为换行),但在某种程度上仍然适用于哈希功能。

在这个新表达式中,唯一剩下的模运算是常量,任何受人尊敬的编译器都按照与常量除法优化相同的方式对其进行优化。

关于java - 用整数乘法和取模改进表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31358967/

相关文章:

java - 考虑Java中tinkergraph权重的最短路径

Java:子类化 ResourceBundle

使用 valgrind 进行分块矩阵乘法的 C++ 性能分析

java - 在 Java 中将 long 转换为 byte

在C中将整数转换为字符(根据ASCII表)

c - 如何从标准输入确定二维数组的高度和长度?

执行了Java垃圾回收,但未收到GC通知

java - 在 Java 中读取和操作文本文件

swift - 为什么编程语言(例如 Swift)不使用最快的可用排序——桶排序?

c++ - 如何创建变量快捷方式