mirror of
https://github.com/corda/corda.git
synced 2025-01-07 13:38:47 +00:00
9b2a02e92b
The main goal here is to avoid making JNI calls from code that really shouldn't need JNI (e.g. before this patch, ArrayList.add called Math.max, which called Math.<clinit>, which called Random.<init>, which called System.currentTimeMillis). Besides following the "pay for only what you need" principle, this change ensures we can call LambdaMetaFactory methods during AOT compilation with a minimal VM (i.e. without compiling in JNI methods we don't need).
125 lines
2.7 KiB
Java
125 lines
2.7 KiB
Java
/* Copyright (c) 2008-2015, Avian Contributors
|
|
|
|
Permission to use, copy, modify, and/or distribute this software
|
|
for any purpose with or without fee is hereby granted, provided
|
|
that the above copyright notice and this permission notice appear
|
|
in all copies.
|
|
|
|
There is NO WARRANTY for this software. See license.txt for
|
|
details. */
|
|
|
|
package java.lang;
|
|
|
|
import java.util.Random;
|
|
|
|
public final class Math {
|
|
public static final double E = 2.718281828459045;
|
|
public static final double PI = 3.141592653589793;
|
|
|
|
private static class Static {
|
|
public static final Random random = new Random();
|
|
}
|
|
|
|
private Math() { }
|
|
|
|
public static double max(double a, double b) {
|
|
return (a < b ? b : a);
|
|
}
|
|
|
|
public static double min(double a, double b) {
|
|
return (a > b ? b : a);
|
|
}
|
|
|
|
public static float max(float a, float b) {
|
|
return (a < b ? b : a);
|
|
}
|
|
|
|
public static float min(float a, float b) {
|
|
return (a > b ? b : a);
|
|
}
|
|
|
|
public static long max(long a, long b) {
|
|
return (a < b ? b : a);
|
|
}
|
|
|
|
public static long min(long a, long b) {
|
|
return (a > b ? b : a);
|
|
}
|
|
|
|
public static int max(int a, int b) {
|
|
return (a < b ? b : a);
|
|
}
|
|
|
|
public static int min(int a, int b) {
|
|
return (a > b ? b : a);
|
|
}
|
|
|
|
public static int abs(int v) {
|
|
return (v < 0 ? -v : v);
|
|
}
|
|
|
|
public static long abs(long v) {
|
|
return (v < 0 ? -v : v);
|
|
}
|
|
|
|
public static float abs(float v) {
|
|
return (v < 0 ? -v : v);
|
|
}
|
|
|
|
public static double abs(double v) {
|
|
return (v < 0 ? -v : v);
|
|
}
|
|
|
|
public static long round(double v) {
|
|
return (long) Math.floor(v + 0.5);
|
|
}
|
|
|
|
public static int round(float v) {
|
|
return (int) Math.floor(v + 0.5);
|
|
}
|
|
|
|
public static double signum(double d) {
|
|
return d > 0 ? +1.0 : d < 0 ? -1.0 : 0;
|
|
}
|
|
|
|
public static float signum(float f) {
|
|
return f > 0 ? +1.0f : f < 0 ? -1.0f : 0;
|
|
}
|
|
|
|
public static double random() {
|
|
return Static.random.nextDouble();
|
|
}
|
|
|
|
public static native double floor(double v);
|
|
|
|
public static native double ceil(double v);
|
|
|
|
public static native double exp(double v);
|
|
|
|
public static native double log(double v);
|
|
|
|
public static native double cos(double v);
|
|
|
|
public static native double sin(double v);
|
|
|
|
public static native double tan(double v);
|
|
|
|
public static native double cosh(double v);
|
|
|
|
public static native double sinh(double v);
|
|
|
|
public static native double tanh(double v);
|
|
|
|
public static native double acos(double v);
|
|
|
|
public static native double asin(double v);
|
|
|
|
public static native double atan(double v);
|
|
|
|
public static native double atan2(double y, double x);
|
|
|
|
public static native double sqrt(double v);
|
|
|
|
public static native double pow(double v, double e);
|
|
}
|