triangularInvCdf function
Triangular inverse cumulative probability density function
with non-zero support over the interval (xMin, xMax)
.
The mean of the probability density occurs at (xMax - xMin) / 2
and the probability density function is symmetric w.r.t its mean.
p
: A probability with0 <= p < 1
.xMin
: The left margin of the domain of the density function.xMax
: The right margin of the domain of the density function.
Throws an error of type ErrorOfType<InvalidFunctionParameter>
if xMin >= xMax
.
Implementation
double triangularInvCdf(num p, num xMin, num xMax) {
if (p < 0 || p > 1) {
throw ErrorOfType<InvalidFunctionParameter>(
message: 'Error in function triangularInvCdf($p, $xMin, $xMax)',
invalidState: 'Probability p = $p.',
expectedState: '0 <= p < 1',
);
}
if (xMin >= xMax) {
throw ErrorOfType<InvalidFunctionParameter>(
message: 'Error in triangularInvCdf($p, $xMin, $xMax)',
invalidState: 'xMin: $xMin >= xMax: $xMax',
expectedState: 'xMin < xMax',
);
}
final range = xMax - xMin;
if (p < 0.5) {
return xMin + range * sqrt(p / 2);
} else {
return xMax - range * sqrt((1.0 - p) / 2);
}
}