我有一个Java方法,它在一个非常紧密的循环中重复评估以下表达式,并且重复次数非常大:
Math.abs(a - b) - Math.abs(c - d)
< p > a
、b
、c
和d
是可以跨越整个类型范围的long
值。它们在每次循环迭代中都不同,并且我不知道它们是否满足任何不变量。
分析器表明,处理器时间的大部分用于此方法。虽然我将首先尝试其他优化方法,但我想知道是否有更聪明的方法来计算上述表达式。
除了手动内联Math.abs()
调用以获得微小(如果有的话)性能增益外,是否有任何数学技巧可以加速评估此表达式?
跨越整个范围
的条件主要是为了避免假设所有变量都适合于32位的答案。 - thkalaa=-2^63; b=任意正数值
。如果你的测试工具没有测试这样的数字,最好确保这种情况是不可能发生的。特别有趣的情况是:a=-2^63; b = 0
- 我希望你的算法能够处理 Math.abs 的结果为负数的情况! - Voo