public final class MathUtils
extends java.lang.Object
Math
.Modifier and Type | Method and Description |
---|---|
static int |
addAndCheck(int x,
int y)
Add two integers, checking for overflow.
|
static long |
addAndCheck(long a,
long b)
Add two long integers, checking for overflow.
|
static long |
binomialCoefficient(int n,
int k)
Returns an exact representation of the Binomial
Coefficient, "
n choose k ", the number of
k -element subsets that can be selected from an
n -element set. |
static double |
binomialCoefficientDouble(int n,
int k)
Returns a
double representation of the Binomial
Coefficient, "n choose k ", the number of
k -element subsets that can be selected from an
n -element set. |
static double |
binomialCoefficientLog(int n,
int k)
Returns the natural
log of the Binomial
Coefficient, "n choose k ", the number of
k -element subsets that can be selected from an
n -element set. |
static double |
cosh(double x)
Returns the
hyperbolic cosine of x.
|
static boolean |
equals(double[] x,
double[] y)
Returns true iff both arguments are null or have same dimensions and all
their elements are
equals |
static boolean |
equals(double x,
double y)
Returns true iff both arguments are NaN or neither is NaN and they are
equal
|
static long |
factorial(int n)
Returns n!.
|
static double |
factorialDouble(int n)
Returns n!.
|
static double |
factorialLog(int n)
Returns the natural logarithm of n!.
|
static int |
gcd(int u,
int v)
Gets the greatest common divisor of the absolute value of two numbers,
using the "binary gcd" method which avoids division and modulo operations.
|
static int |
hash(double value)
Returns an integer hash code representing the given double value.
|
static int |
hash(double[] value)
Returns an integer hash code representing the given double array value.
|
static byte |
indicator(byte x)
For a byte value x, this method returns (byte)(+1) if x >= 0 and (byte)(-1)
if x < 0.
|
static double |
indicator(double x)
For a double precision value x, this method returns +1.0 if x >= 0 and -1.0
if x < 0.
|
static float |
indicator(float x)
For a float value x, this method returns +1.0F if x >= 0 and -1.0F if x <
0.
|
static int |
indicator(int x)
For an int value x, this method returns +1 if x >= 0 and -1 if x < 0.
|
static long |
indicator(long x)
For a long value x, this method returns +1L if x >= 0 and -1L if x < 0.
|
static short |
indicator(short x)
For a short value x, this method returns (short)(+1) if x >= 0 and
(short)(-1) if x < 0.
|
static int |
lcm(int a,
int b)
Returns the least common multiple between two integer values.
|
static double |
log(double base,
double x)
|
static int |
mulAndCheck(int x,
int y)
Multiply two integers, checking for overflow.
|
static long |
mulAndCheck(long a,
long b)
Multiply two long integers, checking for overflow.
|
static double |
normalizeAngle(double a,
double center)
Normalize an angle in a 2&pi wide interval around a center value.
|
static byte |
sign(byte x)
Returns the sign for
byte value
x . |
static double |
sign(double x)
Returns the sign for
double precision
x . |
static float |
sign(float x)
Returns the sign for
float value
x . |
static int |
sign(int x)
Returns the sign for
int value
x . |
static long |
sign(long x)
Returns the sign for
long value
x . |
static short |
sign(short x)
Returns the sign for
short value
x . |
static double |
sinh(double x)
Returns the
hyperbolic sine of x.
|
static int |
subAndCheck(int x,
int y)
Subtract two integers, checking for overflow.
|
static long |
subAndCheck(long a,
long b)
Subtract two long integers, checking for overflow.
|
public static int addAndCheck(int x, int y)
x
- an addendy
- an addendx+y
MathException
- if the result can not be represented as an intpublic static long addAndCheck(long a, long b)
a
- an addendb
- an addenda+b
MathException
- if the result can not be represented as an longpublic static long binomialCoefficient(int n, int k)
n choose k
", the number of
k
-element subsets that can be selected from an
n
-element set.
Preconditions:
0 <= k <= n
(otherwise
IllegalArgumentException
is thrown)long
. The
largest value of n
for which all coefficients are
< Long.MAX_VALUE
is 66. If the computed value exceeds
Long.MAX_VALUE
an ArithMeticException
is
thrown.n
- the size of the setk
- the size of the subsets to be countedn choose k
java.lang.IllegalArgumentException
- if preconditions are not met.MathException
- if the result is too large to be represented by a long integer.public static double binomialCoefficientDouble(int n, int k)
double
representation of the Binomial
Coefficient, "n choose k
", the number of
k
-element subsets that can be selected from an
n
-element set.
Preconditions:
0 <= k <= n
(otherwise
IllegalArgumentException
is thrown)double
. The
largest value of n
for which all coefficients are <
Double.MAX_VALUE is 1029. If the computed value exceeds Double.MAX_VALUE,
Double.POSITIVE_INFINITY is returnedn
- the size of the setk
- the size of the subsets to be countedn choose k
java.lang.IllegalArgumentException
- if preconditions are not met.public static double binomialCoefficientLog(int n, int k)
log
of the Binomial
Coefficient, "n choose k
", the number of
k
-element subsets that can be selected from an
n
-element set.
Preconditions:
0 <= k <= n
(otherwise
IllegalArgumentException
is thrown)n
- the size of the setk
- the size of the subsets to be countedn choose k
java.lang.IllegalArgumentException
- if preconditions are not met.public static double cosh(double x)
x
- double value for which to find the hyperbolic cosinepublic static boolean equals(double x, double y)
x
- first valuey
- second valuepublic static boolean equals(double[] x, double[] y)
equals
x
- first arrayy
- second arraypublic static long factorial(int n)
n
Factorial, the
product of the numbers 1,...,n
.
Preconditions:
n >= 0
(otherwise IllegalArgumentException
is thrown)long
. The
largest value of n
for which n!
<
Long.MAX_VALUE is 20. If the computed value exceeds Long.MAX_VALUE
an ArithMeticException
is thrown.n
- argumentn!
MathException
- if the result is too large to be represented by a long integer.java.lang.IllegalArgumentException
- if n < 0public static double factorialDouble(int n)
n
Factorial, the
product of the numbers 1,...,n
as a double
.
Preconditions:
n >= 0
(otherwise IllegalArgumentException
is thrown)double
. The
largest value of n
for which n!
<
Double.MAX_VALUE is 170. If the computed value exceeds
Double.MAX_VALUE, Double.POSITIVE_INFINITY is returnedn
- argumentn!
java.lang.IllegalArgumentException
- if n < 0public static double factorialLog(int n)
Preconditions:
n >= 0
(otherwise IllegalArgumentException
is thrown)n
- argumentn!
java.lang.IllegalArgumentException
- if preconditions are not met.public static int gcd(int u, int v)
Gets the greatest common divisor of the absolute value of two numbers, using the "binary gcd" method which avoids division and modulo operations. See Knuth 4.5.2 algorithm B. This algorithm is due to Josef Stein (1961).
u
- a non-zero numberv
- a non-zero numberpublic static int hash(double value)
value
- the value to be hashedpublic static int hash(double[] value)
value
- the value to be hashed (may be null)public static byte indicator(byte x)
x
- the value, a bytepublic static double indicator(double x)
NaN
if x
is
NaN
.x
- the value, a doublepublic static float indicator(float x)
NaN
if x
is NaN
.x
- the value, a floatpublic static int indicator(int x)
x
- the value, an intpublic static long indicator(long x)
x
- the value, a longpublic static short indicator(short x)
x
- the value, a shortpublic static int lcm(int a, int b)
a
- the first integer value.b
- the second integer value.MathException
- if the lcm is too large to store as an intpublic static double log(double base, double x)
Returns the logarithm
for base b
of x
.
Returns NaN
if either argument is negative. If
base
is 0 and x
is positive, 0 is returned.
If base
is positive and x
is 0,
Double.NEGATIVE_INFINITY
is returned. If both arguments
are 0, the result is NaN
.
base
- the base of the logarithm, must be greater than 0x
- argument, must be greater than 0public static int mulAndCheck(int x, int y)
x
- a factory
- a factorx*y
MathException
- if the result can not be represented as an intpublic static long mulAndCheck(long a, long b)
a
- first valueb
- second valuea * b
MathException
- if the result can not be represented as an longpublic static double normalizeAngle(double a, double center)
This method has three main uses:
a = MathUtils.normalizeAngle(a, Math.PI);
a = MathUtils.normalizeAngle(a, 0.0);
angle = MathUtils.normalizeAngle(end, start) - start;
Note that due to numerical accuracy and since π cannot be represented exactly, the result interval is closed, it cannot be half-closed as would be more satisfactory in a purely mathematical view.
a
- angle to normalizecenter
- center of the desired 2π interval for the resultpublic static byte sign(byte x)
x
.
For a byte value x, this method returns (byte)(+1) if x > 0, (byte)(0) if x = 0, and (byte)(-1) if x < 0.
x
- the value, a bytepublic static double sign(double x)
x
.
For a double value x
, this method returns +1.0
if x > 0
, 0.0
if x = 0.0
,
and -1.0
if x < 0
. Returns NaN
if x
is NaN
.
x
- the value, a doublepublic static float sign(float x)
x
.
For a float value x, this method returns +1.0F if x > 0, 0.0F if x = 0.0F,
and -1.0F if x < 0. Returns NaN
if x
is
NaN
.
x
- the value, a floatpublic static int sign(int x)
x
.
For an int value x, this method returns +1 if x > 0, 0 if x = 0, and -1 if x < 0.
x
- the value, an intpublic static long sign(long x)
x
.
For a long value x, this method returns +1L if x > 0, 0L if x = 0, and -1L if x < 0.
x
- the value, a longpublic static short sign(short x)
x
.
For a short value x, this method returns (short)(+1) if x > 0, (short)(0) if x = 0, and (short)(-1) if x < 0.
x
- the value, a shortpublic static double sinh(double x)
x
- double value for which to find the hyperbolic sinepublic static int subAndCheck(int x, int y)
x
- the minuendy
- the subtrahendx-y
MathException
- if the result can not be represented as an intpublic static long subAndCheck(long a, long b)
a
- first valueb
- second valuea-b
MathException
- if the result can not be represented as an long