Class InternalUtils
java.lang.Object
org.apache.commons.rng.sampling.distribution.InternalUtils
Functions used by some of the samplers.
This class is not part of the public API, as it would be
better to group these utilities in a dedicated component.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final class
Class for computing the natural logarithm of the factorial ofn
. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final int
The first array index with a non-zero log factorial.private static final double
The multiplier to convert the least significant 53-bits of along
to adouble
.private static final double[]
All long-representable factorials, precomputed as the natural logarithm using Matlab R2023a VPA: log(vpa(x)). -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription(package private) static double
logFactorial
(int n) (package private) static double
makeDouble
(long v) Creates adouble
in the interval[0, 1)
from along
value.(package private) static double
makeNonZeroDouble
(long v) Creates adouble
in the interval(0, 1]
from along
value.(package private) static NormalizedGaussianSampler
Create a new instance of the given sampler usingSharedStateSampler.withUniformRandomProvider(UniformRandomProvider)
.(package private) static double
requireFinite
(double x, String name) Checks the valuex
is finite.(package private) static double
requirePositive
(double x, String name) Checks the valuex >= 0
.(package private) static double
requirePositiveFinite
(double x, String name) Checks the valuex >= 0
and is finite.(package private) static double
requireRange
(double min, double max, double x, String name) Checks the value is within the range:min <= x < max
.(package private) static double
requireRangeClosed
(double min, double max, double x, String name) Checks the value is within the closed range:min <= x <= max
.(package private) static double
requireStrictlyPositive
(double x, String name) Checks the valuex > 0
.(package private) static double
requireStrictlyPositiveFinite
(double x, String name) Checks the valuex > 0
and is finite.(package private) static double
validateProbabilities
(double[] probabilities) Validate the probabilities sum to a finite positive number.
-
Field Details
-
LOG_FACTORIALS
private static final double[] LOG_FACTORIALSAll long-representable factorials, precomputed as the natural logarithm using Matlab R2023a VPA: log(vpa(x)).Note: This table could be any length. Previously this stored the long value of n!, not log(n!). Using the previous length maintains behaviour.
-
BEGIN_LOG_FACTORIALS
private static final int BEGIN_LOG_FACTORIALSThe first array index with a non-zero log factorial.- See Also:
-
DOUBLE_MULTIPLIER
private static final double DOUBLE_MULTIPLIERThe multiplier to convert the least significant 53-bits of along
to adouble
. Taken from org.apache.commons.rng.core.util.NumberFactory.- See Also:
-
-
Constructor Details
-
InternalUtils
private InternalUtils()Utility class.
-
-
Method Details
-
logFactorial
static double logFactorial(int n) - Parameters:
n
- Argument.- Returns:
n!
- Throws:
IndexOutOfBoundsException
- if the result is too large to be represented by along
(i.e. ifn > 20
), orn
is negative.
-
validateProbabilities
static double validateProbabilities(double[] probabilities) Validate the probabilities sum to a finite positive number.- Parameters:
probabilities
- the probabilities- Returns:
- the sum
- Throws:
IllegalArgumentException
- ifprobabilities
is null or empty, a probability is negative, infinite orNaN
, or the sum of all probabilities is not strictly positive.
-
requireFinite
Checks the valuex
is finite.- Parameters:
x
- Value.name
- Name of the value.- Returns:
- x
- Throws:
IllegalArgumentException
- ifx
is non-finite
-
requirePositiveFinite
Checks the valuex >= 0
and is finite. Note: This method allowsx == -0.0
.- Parameters:
x
- Value.name
- Name of the value.- Returns:
- x
- Throws:
IllegalArgumentException
- ifx < 0
or is non-finite
-
requireStrictlyPositiveFinite
Checks the valuex > 0
and is finite.- Parameters:
x
- Value.name
- Name of the value.- Returns:
- x
- Throws:
IllegalArgumentException
- ifx <= 0
or is non-finite
-
requirePositive
Checks the valuex >= 0
. Note: This method allowsx == -0.0
.- Parameters:
x
- Value.name
- Name of the value.- Returns:
- x
- Throws:
IllegalArgumentException
- ifx < 0
-
requireStrictlyPositive
Checks the valuex > 0
.- Parameters:
x
- Value.name
- Name of the value.- Returns:
- x
- Throws:
IllegalArgumentException
- ifx <= 0
-
requireRange
Checks the value is within the range:min <= x < max
.- Parameters:
min
- Minimum (inclusive).max
- Maximum (exclusive).x
- Value.name
- Name of the value.- Returns:
- x
- Throws:
IllegalArgumentException
- ifx < min || x >= max
.
-
requireRangeClosed
Checks the value is within the closed range:min <= x <= max
.- Parameters:
min
- Minimum (inclusive).max
- Maximum (inclusive).x
- Value.name
- Name of the value.- Returns:
- x
- Throws:
IllegalArgumentException
- ifx < min || x > max
.
-
newNormalizedGaussianSampler
static NormalizedGaussianSampler newNormalizedGaussianSampler(NormalizedGaussianSampler sampler, UniformRandomProvider rng) Create a new instance of the given sampler usingSharedStateSampler.withUniformRandomProvider(UniformRandomProvider)
.- Parameters:
sampler
- Source sampler.rng
- Generator of uniformly distributed random numbers.- Returns:
- the new sampler
- Throws:
UnsupportedOperationException
- if the underlying sampler is not aSharedStateSampler
or does not return aNormalizedGaussianSampler
when sharing state.
-
makeDouble
static double makeDouble(long v) Creates adouble
in the interval[0, 1)
from along
value.- Parameters:
v
- Number.- Returns:
- a
double
value in the interval[0, 1)
.
-
makeNonZeroDouble
static double makeNonZeroDouble(long v) Creates adouble
in the interval(0, 1]
from along
value.- Parameters:
v
- Number.- Returns:
- a
double
value in the interval(0, 1]
.
-