/* * Log of changes: 2011. */ package longsVsDoubles; /** * Tests the performance of doubles vs longs in basic operations used by VRP algorithms. * * @author Jorge E. Mendoza (jorge.mendoza@uco.f) * @since 2011.12.12 */ public class DoublesVsLongs { /** * Holds a distance matrix. The distances are represented by double types */ private final double[][] doubleDistances; /** * Holds a distance matrix. The distances are represented by long types */ private final long[][] longDistances; /** * Builds a new DoublesVsLongs test * * @param matrix * a matrix of double numbers */ public DoublesVsLongs(double[][] matrix) { this.doubleDistances = matrix.clone(); this.longDistances = new long[matrix[0].length][matrix.length]; for (int i = 0; i < matrix[0].length; i++) { for (int j = 0; j < matrix.length; j++) { this.longDistances[i][j] = (long) (this.doubleDistances[i][j] * 10000000); } } } /** * Tests the performance of doubles vs longs in addition operations. * * @param couples * the access points to the distance matrix */ public void testAddition(int[][] couples) { // Floats long start, end; double sum = 0; start = System.currentTimeMillis(); for (int i = 0; i < couples[0].length; i++) { sum = sum + this.doubleDistances[couples[i][0]][couples[i][1]]; } end = System.currentTimeMillis(); System.out.println("Adding doubles: " + (end - start)); long sum2 = 0; start = System.currentTimeMillis(); for (int i = 0; i < couples[0].length; i++) { sum2 = sum2 + this.longDistances[couples[i][0]][couples[i][1]]; } end = System.currentTimeMillis(); System.out.println("Adding longs: " + (end - start)); } /** * Tests the performance of doubles vs longs in addition operations. * * @param couples * the access points to the distance matrix */ public void testComparison(int[][] couples) { // Floats long start, end; start = System.currentTimeMillis(); for (int i = 1; i < couples[0].length; i++) { if (this.doubleDistances[couples[i - 1][0]][couples[i - 1][1]] <= this.doubleDistances[couples[i][0]][couples[i][1]]) { // Do something (e.g., update best solution found) } } end = System.currentTimeMillis(); System.out.println("Comparing doubles: " + (end - start)); start = System.currentTimeMillis(); for (int i = 1; i < couples[0].length; i++) { if (this.longDistances[couples[i - 1][0]][couples[i - 1][1]] <= this.longDistances[couples[i][0]][couples[i][1]]) { // Do something (e.g., update best solution found) } } end = System.currentTimeMillis(); System.out.println("Comparing longs: " + (end - start)); } }