static

in commons-math-core/src/main/java/org/apache/commons/math4/core/jdkmath/JdkMath.java [220:393]


    static {
        final String prop = System.getProperty(PROPERTY_KEY);
        final Impl impl = prop != null ?
            Impl.valueOf(prop) :
            Impl.CM;


        switch (impl) {
        case CM:
            PI = AccurateMath.PI;
            E = AccurateMath.E;
            ABS_INT = AccurateMath::abs;
            ABS_LONG = AccurateMath::abs;
            ABS_FLOAT = AccurateMath::abs;
            ABS_DOUBLE = AccurateMath::abs;
            ACOS = AccurateMath::acos;
            ACOSH = AccurateMath::acosh;
            ADDEXACT_INT = AccurateMath::addExact;
            ADDEXACT_LONG = AccurateMath::addExact;
            ASIN = AccurateMath::asin;
            ASINH = AccurateMath::asinh;
            ATAN = AccurateMath::atan;
            ATAN2 = AccurateMath::atan2;
            ATANH = AccurateMath::atanh;
            CBRT = AccurateMath::cbrt;
            CEIL = AccurateMath::ceil;
            COPYSIGN_FLOAT = AccurateMath::copySign;
            COPYSIGN_DOUBLE = AccurateMath::copySign;
            COS = AccurateMath::cos;
            COSH = AccurateMath::cosh;
            DECREMENTEXACT_INT = AccurateMath::decrementExact;
            DECREMENTEXACT_LONG = AccurateMath::decrementExact;
            EXP = AccurateMath::exp;
            EXPM1 = AccurateMath::expm1;
            FLOOR = AccurateMath::floor;
            FLOORDIV_INT = AccurateMath::floorDiv;
            FLOORDIV_LONG = AccurateMath::floorDiv;
            FLOORMOD_INT = AccurateMath::floorMod;
            FLOORMOD_LONG = AccurateMath::floorMod;
            GETEXPONENT_FLOAT = AccurateMath::getExponent;
            GETEXPONENT_DOUBLE = AccurateMath::getExponent;
            HYPOT = AccurateMath::hypot;
            IEEEREMAINDER = AccurateMath::IEEEremainder;
            INCREMENTEXACT_INT = AccurateMath::incrementExact;
            INCREMENTEXACT_LONG = AccurateMath::incrementExact;
            LOG = AccurateMath::log;
            LOG10 = AccurateMath::log10;
            LOG1P = AccurateMath::log1p;
            MAX_INT = AccurateMath::max;
            MAX_LONG = AccurateMath::max;
            MAX_FLOAT = AccurateMath::max;
            MAX_DOUBLE = AccurateMath::max;
            MIN_INT = AccurateMath::min;
            MIN_LONG = AccurateMath::min;
            MIN_FLOAT = AccurateMath::min;
            MIN_DOUBLE = AccurateMath::min;
            MULTIPLYEXACT_INT = AccurateMath::multiplyExact;
            MULTIPLYEXACT_LONG = AccurateMath::multiplyExact;
            NEGATEEXACT_INT = Math::negateExact; // Not implemented.
            NEGATEEXACT_LONG = Math::negateExact; // Not implemented.
            NEXTAFTER_FLOAT = AccurateMath::nextAfter;
            NEXTAFTER_DOUBLE = AccurateMath::nextAfter;
            NEXTDOWN_FLOAT = AccurateMath::nextDown;
            NEXTDOWN_DOUBLE = AccurateMath::nextDown;
            NEXTUP_FLOAT = AccurateMath::nextUp;
            NEXTUP_DOUBLE = AccurateMath::nextUp;
            POW = AccurateMath::pow;
            RANDOM = Math::random; // Not implemented.
            RINT = AccurateMath::rint;
            ROUND_DOUBLE = AccurateMath::round;
            ROUND_FLOAT = AccurateMath::round;
            SCALB_DOUBLE = AccurateMath::scalb;
            SCALB_FLOAT = AccurateMath::scalb;
            SIGNUM_DOUBLE = AccurateMath::signum;
            SIGNUM_FLOAT = AccurateMath::signum;
            SQRT = Math::sqrt; // Not implemented.
            SIN = AccurateMath::sin;
            SINH = AccurateMath::sinh;
            SUBTRACTEXACT_INT = AccurateMath::subtractExact;
            SUBTRACTEXACT_LONG = AccurateMath::subtractExact;
            TAN = AccurateMath::tan;
            TANH = AccurateMath::tanh;
            TODEGREES = AccurateMath::toDegrees;
            TOINTEXACT = AccurateMath::toIntExact;
            TORADIANS = AccurateMath::toRadians;
            ULP_DOUBLE = AccurateMath::ulp;
            ULP_FLOAT = AccurateMath::ulp;
            break;

        case JDK:
            PI = Math.PI;
            E = Math.E;
            ABS_INT = Math::abs;
            ABS_LONG = Math::abs;
            ABS_FLOAT = Math::abs;
            ABS_DOUBLE = Math::abs;
            ACOS = Math::acos;
            ACOSH = AccurateMath::acosh; // Not implemented.
            ADDEXACT_INT = Math::addExact;
            ADDEXACT_LONG = Math::addExact;
            ASIN = Math::asin;
            ASINH = AccurateMath::asinh; // Not implemented.
            ATAN = Math::atan;
            ATAN2 = Math::atan2;
            ATANH = AccurateMath::atanh; // Not implemented.
            CBRT = Math::cbrt;
            CEIL = Math::ceil;
            COPYSIGN_FLOAT = Math::copySign;
            COPYSIGN_DOUBLE = Math::copySign;
            COS = Math::cos;
            COSH = Math::cosh;
            DECREMENTEXACT_INT = Math::decrementExact;
            DECREMENTEXACT_LONG = Math::decrementExact;
            EXP = Math::exp;
            EXPM1 = Math::expm1;
            FLOOR = Math::floor;
            FLOORDIV_INT = Math::floorDiv;
            FLOORDIV_LONG = Math::floorDiv;
            FLOORMOD_INT = Math::floorMod;
            FLOORMOD_LONG = Math::floorMod;
            GETEXPONENT_FLOAT = Math::getExponent;
            GETEXPONENT_DOUBLE = Math::getExponent;
            HYPOT = Math::hypot;
            IEEEREMAINDER = Math::IEEEremainder;
            INCREMENTEXACT_INT = Math::incrementExact;
            INCREMENTEXACT_LONG = Math::incrementExact;
            LOG = Math::log;
            LOG10 = Math::log10;
            LOG1P = Math::log1p;
            MAX_INT = Math::max;
            MAX_LONG = Math::max;
            MAX_FLOAT = Math::max;
            MAX_DOUBLE = Math::max;
            MIN_INT = Math::min;
            MIN_LONG = Math::min;
            MIN_FLOAT = Math::min;
            MIN_DOUBLE = Math::min;
            MULTIPLYEXACT_INT = Math::multiplyExact;
            MULTIPLYEXACT_LONG = Math::multiplyExact;
            NEGATEEXACT_INT = Math::negateExact;
            NEGATEEXACT_LONG = Math::negateExact;
            NEXTAFTER_FLOAT = Math::nextAfter;
            NEXTAFTER_DOUBLE = Math::nextAfter;
            NEXTDOWN_FLOAT = Math::nextDown;
            NEXTDOWN_DOUBLE = Math::nextDown;
            NEXTUP_FLOAT = Math::nextUp;
            NEXTUP_DOUBLE = Math::nextUp;
            POW = Math::pow;
            RANDOM = Math::random;
            RINT = Math::rint;
            ROUND_DOUBLE = Math::round;
            ROUND_FLOAT = Math::round;
            SCALB_DOUBLE = Math::scalb;
            SCALB_FLOAT = Math::scalb;
            SIGNUM_DOUBLE = Math::signum;
            SIGNUM_FLOAT = Math::signum;
            SIN = Math::sin;
            SINH = Math::sinh;
            SQRT = Math::sqrt;
            SUBTRACTEXACT_INT = Math::subtractExact;
            SUBTRACTEXACT_LONG = Math::subtractExact;
            TAN = Math::tan;
            TANH = Math::tanh;
            TODEGREES = Math::toDegrees;
            TOINTEXACT = Math::toIntExact;
            TORADIANS = Math::toRadians;
            ULP_DOUBLE = Math::ulp;
            ULP_FLOAT = Math::ulp;
            break;

        default:
            throw new IllegalStateException("Internal error"); // Should never happen.
        }
    }