code: @Pure
  	public static int compareEpsilon(double v1, double v2, double epsilon) {
  		final double v = v1 - v2;
  		final double eps = Double.isNaN(epsilon) ? Math.ulp(v) : epsilon;
  		if (Math.abs(v) <= eps) {
  			return 0;
  		}
  		if (v <= 0.) {
  			return -1;
  		}
  		return 1;
  	}
docs: Compares its two arguments for order.
  Returns a negative integer,
  zero, or a positive integer as the first argument is less than, equal
  to, or greater than the second.
  
  @param v1 first value.
  @param v2 second value.
  @param epsilon approximation epsilon. If {@link Double#NaN}, the function {@link Math#ulp(double)} is
  used for evaluating the epsilon.
  @return a negative integer, zero, or a positive integer as the
  first argument is less than, equal to, or greater than the
  second.