mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-19 13:50:28 +01:00
[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:
committed by
EmilieNumworks
parent
6f7e1447ed
commit
6ccabe2d3b
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user