Java Float Number Almost Equal almostEqual(float a, float b, float maxRelativeError)

Here you can find the source of almostEqual(float a, float b, float maxRelativeError)

Description

almost Equal

License

Open Source License

Declaration

public static boolean almostEqual(float a, float b, float maxRelativeError) 

Method Source Code

//package com.java2s;
/*//from w w  w .  ja  va2  s. c  o  m
 *  RapidMiner
 *
 *  Copyright (C) 2001-2014 by RapidMiner and the contributors
 *
 *  Complete list of developers available at our web site:
 *
 *       http://rapidminer.com
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU Affero General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Affero General Public License for more details.
 *
 *  You should have received a copy of the GNU Affero General Public License
 *  along with this program.  If not, see http://www.gnu.org/licenses/.
 */

public class Main {
    public static boolean almostEqual(float a, float b, float maxRelativeError) {

        if (Float.isNaN(a) || Float.isNaN(b)) {
            return false;
        }

        if (a == b) {
            return true;
        }

        float relativeError;
        if (Math.abs(b) > Math.abs(a)) {
            relativeError = Math.abs((a - b) / b);
        } else {
            relativeError = Math.abs((a - b) / a);
        }
        if (relativeError <= maxRelativeError) {
            return true;
        }
        return false;

    }

    public static boolean almostEqual(double a, double b, double maxRelativeError) {

        if (Double.isNaN(a) || Double.isNaN(b)) {
            return false;
        }

        if (a == b) {
            return true;
        }

        double relativeError;
        if (Math.abs(b) > Math.abs(a)) {
            relativeError = Math.abs((a - b) / b);
        } else {
            relativeError = Math.abs((a - b) / a);
        }
        if (relativeError <= maxRelativeError) {
            return true;
        }
        return false;

    }
}

Related

  1. almostEquals(final float value, final float expected)