Имам следната проста програма, която умножава две различни числа с плаваща запетая много пъти. Както можете да видите, едно от числата е много малко. Когато изчислих времето за изпълнение на двете умножения, бях изненадан, че малкото число отнема много повече време от другото. Изглежда, че работата с малки двойки е по-бавна... Някой знае ли какво се случва?
public static void main(String[] args) throws Exception
{
long iterations = 10000000;
double result;
double number = 0.1D;
double numberA = Double.MIN_VALUE;
double numberB = 0.0008D;
long startTime, endTime,elapsedTime;
//Multiply numberA
startTime = System.currentTimeMillis();
for(int i=0; i < iterations; i++)
result = number * numberA;
endTime = System.currentTimeMillis();
elapsedTime = endTime - startTime;
System.out.println("Number A) Time elapsed: " + elapsedTime + " ms");
//Multiply numberB
startTime = System.currentTimeMillis();
for(int i=0; i < iterations; i++)
result = number * numberB;
endTime = System.currentTimeMillis();
elapsedTime = endTime - startTime;
System.out.println("Number B) Time elapsed: " + elapsedTime + " ms");
}
Резултат:
Number A) Time elapsed: 3546 ms Number B) Time elapsed: 110 ms
Платформа Windows, Java 1.6.0_07
Благодаря, Диего