/**
  * Replacement function for double comparison
  *
  * @param d1 a double.
  * @param d2 a double.
  * @return a int.
  */
 public static int doubleSub(double d1, double d2) {
   if (d1 == d2) {
     if (Properties.DYNAMIC_SEEDING) {
       ConstantPoolManager.getInstance().addDynamicConstant(d1);
     }
     ;
     return 0;
   } else {
     double diff = d1 - d2;
     double diff2 = diff / (1.0 + Math.abs(diff));
     if (Double.isNaN(d1) || Double.isNaN(d2) || Double.isInfinite(d1) || Double.isInfinite(d2)) {
       return Double.compare(d1, d2);
     }
     //			int d3 = (int) Math.round(Integer.MAX_VALUE * diff2);
     int d3 =
         (int)
             (diff2 < 0
                 ? Math.floor(Integer.MAX_VALUE * diff2)
                 : Math.ceil(Integer.MAX_VALUE * diff2));
     if (Properties.DYNAMIC_SEEDING) {
       ConstantPoolManager.getInstance().addDynamicConstant(d1);
       ConstantPoolManager.getInstance().addDynamicConstant(d2);
     }
     ;
     return d3;
   }
 }
 /**
  * Replacement function for long comparison
  *
  * @param l1 a long.
  * @param l2 a long.
  * @return a int.
  */
 public static int longSub(long l1, long l2) {
   if (l1 == l2) {
     if (Properties.DYNAMIC_SEEDING) {
       ConstantPoolManager.getInstance().addDynamicConstant(l1);
     }
     ;
     return 0;
   } else {
     double diff = l1 - l2;
     double diff2 = Math.signum(diff) * Math.abs(diff) / (1.0 + Math.abs(diff));
     int d3 = (int) Math.ceil(Integer.MAX_VALUE * diff2);
     if (Properties.DYNAMIC_SEEDING) {
       ConstantPoolManager.getInstance().addDynamicConstant(l1);
       ConstantPoolManager.getInstance().addDynamicConstant(l2);
     }
     ;
     return d3;
   }
 }
 /**
  * Replacement function for float comparison
  *
  * @param f1 a float.
  * @param f2 a float.
  * @return a int.
  */
 public static int floatSub(float f1, float f2) {
   if (f1 == f2) {
     if (Properties.DYNAMIC_SEEDING) {
       ConstantPoolManager.getInstance().addDynamicConstant(f1);
     }
     ;
     return 0;
   } else {
     double diff = f1 - f2;
     double diff2 = Math.signum(diff) * Math.abs(diff) / (1.0F + Math.abs(diff));
     if (Float.isNaN(f1) || Float.isNaN(f2) || Float.isInfinite(f1) || Float.isInfinite(f2)) {
       return Float.compare(f1, f2);
     }
     int d3 = (int) Math.ceil(Integer.MAX_VALUE * diff2);
     if (Properties.DYNAMIC_SEEDING) {
       ConstantPoolManager.getInstance().addDynamicConstant(f1);
       ConstantPoolManager.getInstance().addDynamicConstant(f2);
     }
     ;
     return d3;
   }
 }