在我的机器上,整数减法比双减法快2.5倍。
然而,整数乘法仅比双乘法快约1.5倍。
以下测试适用于随机数据,这可能会阻止编译器进行优化。
// test whether int subs are faster than double subs
public void compareIntAndFloatSubtraction(){
int N = 100000; // input array size
int k = 100000; // number of mathematical operations performed on each element
// generate random data
int[] ints = new int[N];
double[] doubles = new double[N];
Random r = new Random(1l);
for (int i = 0; i < N; i++) {
ints[i] = r.nextInt();
doubles[i] = r.nextDouble();
}
// measure integer subtractions
long before = System.currentTimeMillis();
for (int i = 1; i < N; i++) {
for (int j = 0; j < k; j++) {
ints[i] -= ints[i-1]; // referring to another element might prevent from optimization also
}
}
System.out.println(String.format("time needed for int subs [ms]: %s", System.currentTimeMillis()-before));
// measure double subtractions
before = System.currentTimeMillis();
for (int i = 1; i < N; i++) {
for (int j = 0; j < k; j++) {
doubles[i] -= doubles[i-1];
}
}
System.out.println(String.format("time needed for double subs [ms]: %s", System.currentTimeMillis()-before));
}