/** * */ package fr.unistra.pelican.util.vectorial.ordering; import fr.unistra.pelican.util.Tools; /** * The same as NormAndLexicographic ordering but with robust double comparison using Tools.relativeDoubleCompare * * @author Benjamin Perret * */ public class EnergyAndLexicographicalOrdering extends VectorialOrdering { public static long compCounter=0; public static long conflictCounter=0; private double energy(double [] o) { double e=0.0; for(int i=0;i<o.length;i++) //if(o[i]>0.0) e+=o[i]*o[i]; return e; } /* (non-Javadoc) * @see fr.unistra.pelican.algorithms.experimental.perret.CC.Ordering.VectorialOrdering#compare(double[], double[]) */ @Override public int compare(double[] o1, double[] o2) { //int a = Double.compare(energy(o1), energy(o2)); int a = Tools.relativeDoubleCompare(energy(o1), energy(o2),100000); compCounter++; if (a != 0) return a; else { conflictCounter++; for (int i = 0; i < o1.length; i++) { int c = Double.compare(o1[i], o2[i]); if (c != 0) { return c; } } } conflictCounter--; return 0; } }