package st.gravel.support.jvm;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;
public class DoubleExtensions {
public static double arcCos(double receiver) {
return Math.acos(receiver);
}
public static double arcSin(double receiver) {
return Math.asin(receiver);
}
public static double arcTan(double receiver) {
return Math.atan(receiver);
}
public static float asFloat(double receiver) {
return (float) receiver;
}
public static Number ceiling(double receiver) {
return roundToRoundingMode(receiver, RoundingMode.FLOOR);
}
public static double cos(double receiver) {
return Math.cos(receiver);
}
public static double degreesToRadians(double receiver) {
return Math.toRadians(receiver);
}
public static double differenceFromDouble_(double receiver, double argument) {
return argument - receiver;
}
public static double differenceFromFloat_(double receiver, float argument) {
return argument - receiver;
}
public static double differenceFromLargeInteger_(double receiver,
BigInteger argument) {
return argument.doubleValue() - receiver;
}
public static double differenceFromSmallInteger_(double receiver, int argument) {
return argument - receiver;
}
public static int emax() {
return Double.MAX_EXPONENT;
}
public static int emin() {
return Double.MIN_EXPONENT;
}
public static double epsilon() {
return Math.ulp(1.0d);
}
public static double exp(double receiver) {
return Math.exp(receiver);
}
public static int exponent(double receiver) {
return StrictMath.getExponent(receiver);
}
public static Number floor(double receiver) {
return roundToRoundingMode(receiver, RoundingMode.FLOOR);
}
public static double fmax() {
return Double.MAX_VALUE;
}
public static double fminDenormalized() {
return Double.MIN_VALUE;
}
public static double fminNormalized() {
return Double.MIN_NORMAL;
}
public static boolean lessFromDouble_(double receiver, double argument) {
return argument < receiver;
}
public static boolean lessFromFloat_(double receiver, float argument) {
return argument < receiver;
}
public static boolean lessFromLargeInteger_(double receiver,
BigInteger argument) {
return new BigDecimal(argument).compareTo(BigDecimal.valueOf(receiver)) == -1;
}
public static boolean lessFromSmallInteger_(double receiver, int argument) {
return argument < receiver;
}
public static double ln(double receiver) {
return Math.log(receiver);
}
public static double moduloQuotientFromDouble_(double receiver, double operand) {
return operand % receiver;
}
public static double moduloQuotientFromFloat_(double receiver, float operand) {
return operand % receiver;
}
public static double moduloQuotientFromLargeInteger_(double receiver, BigInteger operand) {
return operand.doubleValue() % receiver;
}
public static double moduloQuotientFromSmallInteger_(double receiver, int operand) {
return operand % receiver;
}
public static double naN() {
return Double.NaN;
}
public static double negativeInfinity() {
return Double.NEGATIVE_INFINITY;
}
public static double positiveInfinity() {
return Double.POSITIVE_INFINITY;
}
public static int precision() {
return 64;
}
public static String printBase_(double receiver, int radix) {
if (radix == 10)
return Double.toString(receiver);
throw new UnsupportedOperationException("Unsupported radix: " + radix);
}
public static double productFromDouble_(double receiver, double argument) {
return argument * receiver;
}
public static double productFromFloat_(double receiver, float argument) {
return argument * receiver;
}
public static double productFromLargeInteger_(double receiver,
BigInteger argument) {
return argument.doubleValue() * receiver;
}
public static double productFromSmallInteger_(double receiver, int argument) {
return argument * receiver;
}
public static double quotientFromDouble_(double receiver, double argument) {
return argument / receiver;
}
public static double quotientFromFloat_(double receiver, float argument) {
return argument / receiver;
}
public static double quotientFromLargeInteger_(double receiver,
BigInteger argument) {
return argument.doubleValue() / receiver;
}
public static double quotientFromSmallInteger_(double receiver, int argument) {
return argument / receiver;
}
public static double radiansToDegrees(double receiver) {
return Math.toDegrees(receiver);
}
public static Number rounded(double receiver) {
return roundToRoundingMode(receiver, RoundingMode.HALF_UP);
}
private static Number roundToRoundingMode(double receiver,
RoundingMode roundingMode) {
BigDecimal bigDecimal = new BigDecimal(receiver);
BigDecimal rounded = bigDecimal.setScale(0, roundingMode);
return IntegerExtensions.objectFromBigInteger(rounded.toBigInteger());
}
public static double sin(double receiver) {
return Math.sin(receiver);
}
public static double sqrt(double receiver) {
return Math.sqrt(receiver);
}
public static double sumFromDouble_(double receiver, double argument) {
return argument + receiver;
}
public static double sumFromFloat_(double receiver, float argument) {
return argument + receiver;
}
public static double sumFromLargeInteger_(double receiver, BigInteger argument) {
return argument.doubleValue() + receiver;
}
public static double sumFromSmallInteger_(double receiver, int argument) {
return argument + receiver;
}
public static double tan(double receiver) {
return Math.tan(receiver);
}
public static Number truncated(double receiver) {
return roundToRoundingMode(receiver, RoundingMode.DOWN);
}
}