Итак, у меня возникает случайный вопрос при кодировании функции обработки изображений, которая связана со сложностью времени. Ниже приведен мой оригинальный фрагмент кода:
long start = System.currentTimeMillis();
for (int i = 0; i < newWidth; i++) {
for (int j = 0; j < newHeight; j++) {
double x = i * scaleX;
double y = j * scaleY;
double xdiff = x - (int) x;
double ydiff = y - (int) y;
int xf = (int) Math.floor(x);
int xc = (int) Math.ceil(x);
int yf = (int) Math.floor(y);
int yc = (int) Math.ceil(y);
double out = inputArray[xf][yf] * (1 - xdiff) * (1 - ydiff)
+ inputArray[xc][yf] * xdiff * (1 - ydiff)
+ inputArray[xf][yc] * (1 - xdiff) * ydiff
+ inputArray[xc][yc] * xdiff * ydiff;
outputArray[i][j] = (int) out;
}
}
long elapsed = System.currentTimeMillis() - start;
System.out.println("Time used: " + elapsed);
И после того, как я выполнил этот код, мне стало интересно, будет ли быстрее не создавать 4 временные переменные для значений пола и потолка, а вместо этого вычислять их непосредственно при индексации массива. Поэтому я изменил это так:
long start = System.currentTimeMillis();
for (int i = 0; i < newWidth; i++) {
for (int j = 0; j < newHeight; j++) {
double x = i * scaleX;
double y = j * scaleY;
double xdiff = x - (int) x;
double ydiff = y - (int) y;
double out = inputArray[(int) Math.floor(x)][(int) Math.floor(y)] * (1 - xdiff) * (1 - ydiff)
+ inputArray[(int) Math.ceil(x)][(int) Math.floor(y)] * xdiff * (1 - ydiff)
+ inputArray[(int) Math.floor(x)][(int) Math.ceil(y)] * (1 - xdiff) * ydiff
+ inputArray[(int) Math.ceil(x)][(int) Math.ceil(y)] * xdiff * ydiff;
outputArray[i][j] = (int) out;
}
}
long elapsed = System.currentTimeMillis() - start;
System.out.println("Time used: " + elapsed);
Я ожидал, что позднее будет быстрее (потому что вам не нужно записывать во временную переменную и затем обращаться к ней), но оказалось, что позднее, по крайней мере, в 2,5 раза медленнее, чем предыдущий код. Используется 3-кратный зум 1024x768 img.
прежний код: использованное время: 812
позже код: использованное время: 2140
Так в чем же причина разницы во времени?