/** * Returns {@code true} if the given doubles are equals. Positive and negative zero are considered different, while a NaN value is considered * equal to other NaN values. * * @param o1 The first value to compare. * @param o2 The second value to compare. * @return {@code true} if both values are equal. * * @see Double#equals */ public static boolean equals(double o1, double o2) { if (Double.doubleToLongBits(o1) == Double.doubleToLongBits(o2)) return true; double tol = getTolerance(); final double min = o1 - Math.signum(o1) * o1 * tol; final double max = o1 + Math.signum(o1) * o1 * tol; return min <= o2 && o2 <= max; }
/** * Returns {@code true} if the given doubles are equals. Positive and negative zero are considered different, while a NaN value is considered * equal to other NaN values. * * @param o1 The first value to compare. * @param o2 The second value to compare. * @return {@code true} if both values are equal. * * @see Double#equals */ public static boolean equals(double o1, double o2) { if (Double.doubleToLongBits(o1) == Double.doubleToLongBits(o2)) return true; double tol = getTolerance(); final double min = o1 - Math.signum(o1) * o1 * tol; final double max = o1 + Math.signum(o1) * o1 * tol; return min <= o2 && o2 <= max; }