gpt4 book ai didi

java - Math.abs(a - b) - Math.abs(c - d) 的更快实现?

转载 作者:搜寻专家 更新时间:2023-11-01 01:46:25 29 4
gpt4 key购买 nike

我有一个 Java 方法,它在一个非常紧凑的循环中重复计算以下表达式,并有大量重复:

Math.abs(a - b) - Math.abs(c - d)

abcdlong 值,可以跨越他们类型的整个范围。它们在每次循环迭代中都是不同的,并且它们不满足我所知道的任何不变量。

探查器表明处理器时间的很大一部分花在了这个方法上。虽然我首先寻求其他优化途径,但我想知道是否有更智能的方法来计算上述表达式。

除了手动内联 Math.abs() 调用以获得非常轻微的(如果有的话)性能增益外,是否有任何数学技巧可用于加速此表达式的计算?

最佳答案

我怀疑探查器没有给你一个真实的结果,因为它试图分析(并因此增加了开销)这样一个微不足道的“方法”。如果没有配置文件,Math.abs 可以变成少量的机器代码指令,您将无法让它变得比这更快。

我建议您做一个微基准测试来确认这一点。我预计加载数据的成本会高出一个数量级。

long a = 10, b = 6, c = -2, d = 3;

int runs = 1000 * 1000 * 1000;
long start = System.nanoTime();
for (int i = 0; i < runs; i += 2) {
long r = Math.abs(i - a) - Math.abs(c - i);
long r2 = Math.abs(i - b) - Math.abs(d - i);
if (r + r2 < Integer.MIN_VALUE) throw new AssertionError();
}
long time = System.nanoTime() - start;
System.out.printf("Took an average of %.1f ns per abs-abs. %n", (double) time / runs);

打印

Took an average of 0.9 ns per abs-abs. 

关于java - Math.abs(a - b) - Math.abs(c - d) 的更快实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8924731/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com