[apps] Probability: fix bug: for discrete laws, when inversing

probability, round to the closest existing probability (instead of the
closest smaller)
This commit is contained in:
Émilie Feral
2017-12-20 10:08:23 +01:00
committed by EmilieNumworks
parent 6f7e1447ed
commit 6ccabe2d3b

View File

@@ -77,9 +77,12 @@ double Law::cumulativeDistributiveInverseForProbability(double * probability) {
}
double p = 0.0;
int k = 0;
while (p < *probability && k < k_maxNumberOfOperations) {
double delta = 0.0;
do {
delta = std::fabs(*probability-p);
p += evaluateAtDiscreteAbscissa(k++);
}
} while (std::fabs(*probability-p) <= delta && k < k_maxNumberOfOperations);
p -= evaluateAtDiscreteAbscissa(--k);
if (k == k_maxNumberOfOperations) {
*probability = 1.0;
return INFINITY;
@@ -104,9 +107,11 @@ double Law::rightIntegralInverseForProbability(double * probability) {
}
double p = 0.0;
int k = 0;
while (p < 1.0 - *probability && k < k_maxNumberOfOperations) {
double delta = 0.0;
do {
delta = std::fabs(1.0-*probability-p);
p += evaluateAtDiscreteAbscissa(k++);
}
} while (std::fabs(1.0-*probability-p) <= delta && k < k_maxNumberOfOperations);
if (k == k_maxNumberOfOperations) {
*probability = 1.0;
return INFINITY;