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.
}
}