public final class DoubleMath
extends java.lang.Object
Math.| Modifier and Type | Field and Description |
|---|---|
(package private) static double[] |
everySixteenthFactorial |
private static double |
LN_2 |
(package private) static int |
MAX_FACTORIAL |
private static double |
MAX_INT_AS_DOUBLE |
private static double |
MAX_LONG_AS_DOUBLE_PLUS_ONE |
private static double |
MIN_INT_AS_DOUBLE |
private static double |
MIN_LONG_AS_DOUBLE |
| Modifier | Constructor and Description |
|---|---|
private |
DoubleMath() |
| Modifier and Type | Method and Description |
|---|---|
private static double |
checkFinite(double argument) |
static double |
factorial(int n)
Returns
n!, that is, the product of the first n positive integers, 1 if
n == 0, or n!, or Double.POSITIVE_INFINITY if n! >
Double.MAX_VALUE. |
static int |
fuzzyCompare(double a,
double b,
double tolerance)
Compares
a and b "fuzzily," with a tolerance for nearly-equal values. |
static boolean |
fuzzyEquals(double a,
double b,
double tolerance)
Returns
true if a and b are within tolerance of each other. |
static boolean |
isMathematicalInteger(double x)
Returns
true if x represents a mathematical integer. |
static boolean |
isPowerOfTwo(double x)
Returns
true if x is exactly equal to 2^k for some finite integer
k. |
static double |
log2(double x)
Returns the base 2 logarithm of a double value.
|
static int |
log2(double x,
java.math.RoundingMode mode)
Returns the base 2 logarithm of a double value, rounded with the specified rounding mode to an
int. |
static double |
mean(double... values)
Deprecated.
Use
Stats.meanOf(java.lang.Iterable<? extends java.lang.Number>) instead, noting the less strict handling of non-finite
values. |
static double |
mean(int... values)
Deprecated.
Use
Stats.meanOf(java.lang.Iterable<? extends java.lang.Number>) instead, noting the less strict handling of non-finite
values. |
static double |
mean(java.lang.Iterable<? extends java.lang.Number> values)
Deprecated.
Use
Stats.meanOf(java.lang.Iterable<? extends java.lang.Number>) instead, noting the less strict handling of non-finite
values. |
static double |
mean(java.util.Iterator<? extends java.lang.Number> values)
Deprecated.
Use
Stats.meanOf(java.lang.Iterable<? extends java.lang.Number>) instead, noting the less strict handling of non-finite
values. |
static double |
mean(long... values)
Deprecated.
Use
Stats.meanOf(java.lang.Iterable<? extends java.lang.Number>) instead, noting the less strict handling of non-finite
values. |
(package private) static double |
roundIntermediate(double x,
java.math.RoundingMode mode) |
static java.math.BigInteger |
roundToBigInteger(double x,
java.math.RoundingMode mode)
Returns the
BigInteger value that is equal to x rounded with the specified
rounding mode, if possible. |
static int |
roundToInt(double x,
java.math.RoundingMode mode)
Returns the
int value that is equal to x rounded with the specified rounding
mode, if possible. |
static long |
roundToLong(double x,
java.math.RoundingMode mode)
Returns the
long value that is equal to x rounded with the specified rounding
mode, if possible. |
private static final double MIN_INT_AS_DOUBLE
private static final double MAX_INT_AS_DOUBLE
private static final double MIN_LONG_AS_DOUBLE
private static final double MAX_LONG_AS_DOUBLE_PLUS_ONE
private static final double LN_2
static final int MAX_FACTORIAL
static final double[] everySixteenthFactorial
static double roundIntermediate(double x,
java.math.RoundingMode mode)
public static int roundToInt(double x,
java.math.RoundingMode mode)
int value that is equal to x rounded with the specified rounding
mode, if possible.java.lang.ArithmeticException - if
x is infinite or NaN
x, after being rounded to a mathematical integer using the specified rounding
mode, is either less than Integer.MIN_VALUE or greater than Integer.MAX_VALUE
x is not a mathematical integer and mode is RoundingMode.UNNECESSARY
public static long roundToLong(double x,
java.math.RoundingMode mode)
long value that is equal to x rounded with the specified rounding
mode, if possible.java.lang.ArithmeticException - if
x is infinite or NaN
x, after being rounded to a mathematical integer using the specified rounding
mode, is either less than Long.MIN_VALUE or greater than Long.MAX_VALUE
x is not a mathematical integer and mode is RoundingMode.UNNECESSARY
public static java.math.BigInteger roundToBigInteger(double x,
java.math.RoundingMode mode)
BigInteger value that is equal to x rounded with the specified
rounding mode, if possible.java.lang.ArithmeticException - if
x is infinite or NaN
x is not a mathematical integer and mode is RoundingMode.UNNECESSARY
public static boolean isPowerOfTwo(double x)
true if x is exactly equal to 2^k for some finite integer
k.public static double log2(double x)
Special cases:
x is NaN or less than zero, the result is NaN.
x is positive infinity, the result is positive infinity.
x is positive or negative zero, the result is negative infinity.
The computed result is within 1 ulp of the exact result.
If the result of this method will be immediately rounded to an int, log2(double, RoundingMode) is faster.
public static int log2(double x,
java.math.RoundingMode mode)
int.
Regardless of the rounding mode, this is faster than (int) log2(x).
java.lang.IllegalArgumentException - if x <= 0.0, x is NaN, or x is
infinitepublic static boolean isMathematicalInteger(double x)
true if x represents a mathematical integer.
This is equivalent to, but not necessarily implemented as, the expression !Double.isNaN(x) && !Double.isInfinite(x) && x == Math.rint(x).
public static double factorial(int n)
n!, that is, the product of the first n positive integers, 1 if
n == 0, or n!, or Double.POSITIVE_INFINITY if n! >
Double.MAX_VALUE.
The result is within 1 ulp of the true value.
java.lang.IllegalArgumentException - if n < 0public static boolean fuzzyEquals(double a,
double b,
double tolerance)
true if a and b are within tolerance of each other.
Technically speaking, this is equivalent to Math.abs(a - b) <= tolerance ||
Double.valueOf(a).equals(Double.valueOf(b)).
Notable special cases include:
a == b, then a and b are always fuzzily equal.
tolerance is zero, and neither a nor b is NaN, then a
and b are fuzzily equal if and only if a == b.
Double.POSITIVE_INFINITY tolerance, all non-NaN values are fuzzily equal.
Double.POSITIVE_INFINITY and Double.NEGATIVE_INFINITY are fuzzily equal only to themselves.
This is reflexive and symmetric, but not transitive, so it is not an
equivalence relation and not suitable for use in Object.equals(java.lang.Object)
implementations.
java.lang.IllegalArgumentException - if tolerance is < 0 or NaNpublic static int fuzzyCompare(double a,
double b,
double tolerance)
a and b "fuzzily," with a tolerance for nearly-equal values.
This method is equivalent to fuzzyEquals(a, b, tolerance) ? 0 : Double.compare(a,
b). In particular, like Double.compare(double, double), it treats all NaN values as
equal and greater than all other values (including Double.POSITIVE_INFINITY).
This is not a total ordering and is not suitable for use in Comparable.compareTo(T) implementations. In particular, it is not transitive.
java.lang.IllegalArgumentException - if tolerance is < 0 or NaN@Deprecated public static double mean(double... values)
Stats.meanOf(java.lang.Iterable<? extends java.lang.Number>) instead, noting the less strict handling of non-finite
values.values.
If these values are a sample drawn from a population, this is also an unbiased estimator of the arithmetic mean of the population.
values - a nonempty series of valuesjava.lang.IllegalArgumentException - if values is empty or contains any non-finite value@Deprecated public static double mean(int... values)
Stats.meanOf(java.lang.Iterable<? extends java.lang.Number>) instead, noting the less strict handling of non-finite
values.values.
If these values are a sample drawn from a population, this is also an unbiased estimator of the arithmetic mean of the population.
values - a nonempty series of valuesjava.lang.IllegalArgumentException - if values is empty@Deprecated public static double mean(long... values)
Stats.meanOf(java.lang.Iterable<? extends java.lang.Number>) instead, noting the less strict handling of non-finite
values.values.
If these values are a sample drawn from a population, this is also an unbiased estimator of the arithmetic mean of the population.
values - a nonempty series of values, which will be converted to double values
(this may cause loss of precision for longs of magnitude over 2^53 (slightly over 9e15))java.lang.IllegalArgumentException - if values is empty@Deprecated public static double mean(java.lang.Iterable<? extends java.lang.Number> values)
Stats.meanOf(java.lang.Iterable<? extends java.lang.Number>) instead, noting the less strict handling of non-finite
values.values.
If these values are a sample drawn from a population, this is also an unbiased estimator of the arithmetic mean of the population.
values - a nonempty series of values, which will be converted to double values
(this may cause loss of precision)java.lang.IllegalArgumentException - if values is empty or contains any non-finite value@Deprecated public static double mean(java.util.Iterator<? extends java.lang.Number> values)
Stats.meanOf(java.lang.Iterable<? extends java.lang.Number>) instead, noting the less strict handling of non-finite
values.values.
If these values are a sample drawn from a population, this is also an unbiased estimator of the arithmetic mean of the population.
values - a nonempty series of values, which will be converted to double values
(this may cause loss of precision)java.lang.IllegalArgumentException - if values is empty or contains any non-finite valueprivate static double checkFinite(double argument)