All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.python.core.ExtraMath Maven / Gradle / Ivy

// Copyright (c) Corporation for National Research Initiatives

package org.python.core;

/**
 * A static utility class with two additional math functions.
 */
public class ExtraMath {
    public static double LOG10 = Math.log(10.0);

    public static double EPSILON = Math.pow(2.0, -52.0);

    public static double CLOSE = EPSILON * 2.0;

    public static double log10(double v) {
        return Math.log(v) / LOG10;
    }

    public static double hypot(double v, double w) {
        v = Math.abs(v);
        w = Math.abs(w);
        if (v < w) {
            double temp = v;
            v = w;
            w = temp;
        }
        if (v == 0.0) {
            return 0.0;
        } else {
            double wv = w / v;
            return v * Math.sqrt(1.0 + wv * wv);
        }
    }

    /**
     * Are v and w "close" to each other? Uses a scaled tolerance.
     */
    public static boolean close(double v, double w, double tol) {
        if (v == w) {
            return true;
        }
        double scaled = tol * (Math.abs(v) + Math.abs(w)) / 2.0;
        return Math.abs(w - v) < scaled;
    }

    public static boolean close(double v, double w) {
        return close(v, w, CLOSE);
    }

    /**
     * Returns floor(v) except when v is very close to the next number, when it
     * returns ceil(v);
     */
    public static double closeFloor(double v) {
        double floor = Math.floor(v);
        return close(v, floor + 1.0) ? floor + 1.0 : floor;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy