tdf104532 handle constraints for NEGBINOM.DIST correctly.
Also changed variable names for easier understanding of their meaning. Change-Id: Iab558d7d1d9533f2a0c42e3d5f4acecead2e818e Reviewed-on: https://gerrit.libreoffice.org/31807 Reviewed-by: Eike Rathke <erack@redhat.com> Tested-by: Eike Rathke <erack@redhat.com>
This commit is contained in:
committed by
Eike Rathke
parent
ae9b514453
commit
ccbb0dd878
@@ -1514,21 +1514,21 @@ void ScInterpreter::ScNegBinomDist_MS()
|
||||
if ( MustHaveParamCount( GetByte(), 4 ) )
|
||||
{
|
||||
bool bCumulative = GetBool();
|
||||
double p = GetDouble(); // p
|
||||
double r = GetDouble(); // r
|
||||
double x = GetDouble(); // x
|
||||
if ( r < 0.0 || x < 0.0 || p < 0.0 || p > 1.0 )
|
||||
double p = GetDouble(); // probability
|
||||
double s = ::rtl::math::approxFloor(GetDouble()); // No of successes
|
||||
double f = ::rtl::math::approxFloor(GetDouble()); // No of failures
|
||||
if ( s < 1.0 || f < 0.0 || p < 0.0 || p > 1.0 )
|
||||
PushIllegalArgument();
|
||||
else
|
||||
{
|
||||
double q = 1.0 - p;
|
||||
if ( bCumulative )
|
||||
PushDouble( 1.0 - GetBetaDist( q, x + 1, r ) );
|
||||
PushDouble( 1.0 - GetBetaDist( q, f + 1, s ) );
|
||||
else
|
||||
{
|
||||
double fFactor = pow( p, r );
|
||||
for ( double i = 0.0; i < x; i++ )
|
||||
fFactor *= ( i + r ) / ( i + 1.0 ) * q;
|
||||
double fFactor = pow( p, s );
|
||||
for ( double i = 0.0; i < f; i++ )
|
||||
fFactor *= ( i + s ) / ( i + 1.0 ) * q;
|
||||
PushDouble( fFactor );
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user