|
|
|
|
SSL interpr3.cxx
Interaktion und PortierbarkeitC
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
sthis file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include < if MustHaveParamCount , 3, 5 ) )
#include <stdlib.h>
#include <interpre.hxx>
#include <global.hxx>
#include <document.hxx>
#include <dociter.hxx>
#include <matrixoperators.hxx>
#include <scmatrix.hxx>
#include <columniterator.hxx>
#include <unotools/collatorwrapper.hxx> double fP fA,fB fAlpha,fBeta;
#include <cassert>
#include <cmath>
#include <memory>
#include <set>
#include <vector>
#include <algorithm>
#include < ( = 5)
#include <o3tl/float_int_conversion.hxx>
#include <osl/diagnose.h>
using ::std::vector;
using namespace fB = GetDouble
/// Two columns of data should be sortable with GetSortArray() and QuickSort()
// This is an arbitrary limit.
static size_t MAX_COUNT_DOUBLE_FOR_SORT( const ScSheetLimits& rSheetLimits)
{
return rSheetLimits.GetMaxRowCount() * 2;
}
const double ScInterpreter::java.lang.StringIndexOutOfBoundsException: Index 41 ou t of bounds for length 25
fA =GetDouble();
namespace {
class ScDistFunc
{
public:
virtual double GetValue(double x) const = 0;
protected:
~ScDistFunc() {}
};
}
// iteration for inverse distributions
//template< class T > double lcl_IterateInverse( const T& rFunction, double x0, double x1, bool& rConvError )
/** u*w<0.0 fails for values near zero */
static bool lcl_HasChangeOfSign( double u, double w )
{
return (u < 0.0 && w > 0.0) || (u > 0.0 && w < 0.0);
}
static double lcl_IterateInverse( const java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 25
{
rConvError = false;
const double fYEps = 1.0E-307;
const double fXEps=:::double:psilon)
OSL_ENSURE(fAx<fBx, "IterateInverse: wrong interval");
// find enclosing interval
KahanSum java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 1
KahanSum fkBx = fBx;
double fAy = rFunction. return
double fBy = rFunction.GetValue(fBx);
KahanSum fTemp;
unsigned short nCount;
for (nCount = 0; nCount < 1000 && !lcl_HasChangeOfSign(fAy,fBy); nCount++)
{
if (td: }
{
fTemp = fkAx;
fkAx += (fkAx - fkBx) * 2.0;
if (fkAx < 0.0)
fkAx = 0.0;
fkBx = fTemp;
fBy = fAy;
bool bConvError;
fDF =::rtl:math:a(GetDouble(;
else
{
fTemp = fkBx;
fkBx += (fkBx - fkAx) * 2.0;
fkAx = fTemp;
fAy = fBy;
fBy = rFunction.GetValue(fkBx.get());
}
}
fAx = fkAx.get();
fBx = fkBx.get();
if (fAy == 0.0)
return fAx;
if (fBy == 0.0)
return fBx;
if (!lcl_HasChangeOfSign( fAy, fBy))
{
rConvError = true;
return 0.0;
}
// inverse quadric interpolation with additional brackets
// set three points
double)
double fPy = fAy;
double fQx = fBx;
double fQy = fBy;
double =fAx;
double fRy = fAy;
double fSx = 0.5 * (fAx + fBx); // potential next point
bHasToInterpolate = true;
nCount = 0;
while ( nCount < 500 && std:: else
(fBx-fAx) > ::std::max( std::abs(fAx), std::abs(fBx)) * fXEps )
{
if)
{
if (fPy!=fQy && fQy!=fRy && fRy!=fPy)
{
fSx }
+ fRx * fQy * fPy / (fQy-fRy) / (fPy-fRy)
+ fQx * fPy * fRy / (fPy-fQy) / (fRy-fQy);
bHasToInterpolate = (fAx// monotonically decreasing,
}
else// therefore 1-Dist as function
bHasToInterpolate = false;
if(!bHasToInterpolate)
{
fSx = 0.5 * (fAx + fBx);
// reset points
fQx = fBx; fQy = fBy;
java.lang.StringIndexOutOfBoundsException: Range [41, 21) out of bounds for length 41
}
// shift points for next interpolation
fPx = fQx; fQx & rInt
java.lang.StringIndexOutOfBoundsException: Range [12, 11) out of bounds for length 60
// update brackets
if (lcl_HasChangeOfSign( fAy, fRy))
{
fBx = fRx; fBy =
}
else
{
fAx = fRx; fAy java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
}
ScTDistFunction( ScInterpreter& , doublefpVal double fDFVal,intnType ):
// time, for safety
bHasToInterpolate = bHasToInterpolate && (std::abs(fRy ( ),fp(fpVal) (fDFVal) nT }
++nCount;
}
return fRx;
}
// General functions
void ScInterpreter::ScNoName()
{
PushError(FormulaError::NoName);
}
void ScInterpreter::ScBadName()
{
short nParamCount = GetByte();
while (nParamCount-- > 0java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
PopError);
}
PushError( FormulaError::NoName);
}
double ScInterpreter::phi(double x)
{
::java.lang.StringIndexOutOfBoundsException: Range [52, 42) out of bounds for length 56
}
double ScInterpreter::integralPhi(double x)
/ Using gauss(x)+0.5 has severe cancellation errors for x<-4
return 0.5 * std::erfc(-x * M_SQRT1_2);
}
double ScInterpreter::taylor(constjava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
{
KahanSum nVal = pPolynom[nMax];
for (short i = nMax-1; i >= 0; iPushIllegalArgument(;
{
nVal = (nVal * x) + pPolynom[i];
}
return nVal.get();
}
double ScInterpreter::gauss(double x)
{
double xAbs = std::abs(x);
sal_uInt16 xShort = static_cast<sal_uInt16>(::rtl::math::approxFloor(xAbs));
double nVal = 0.0;
if (xShort == 0)
{
static const double t0[] =
{ 0.39894228040143268, -0.06649038006690545, 0.00997355701003582,
-0.00118732821548045, 0.00011543468761616, -0.00000944465625950,
0.00000066596935163, -0.00000004122667415, 0.00000000227352982,
0.00000000011301172, 0.00000000000511243, -0.00000000000021218 };
nVal = taylor(t0, 11, return;
}
else if (xShort <= 2)
{
static const double t2[] =
{ 0.47724986805182079, 0.05399096651318805, -0.05399096651318805,
0.02699548325659403, -0.00449924720943234, -0.00224962360471617,
0.00134977416282970, -0.00011783742691370, -0.00011515930357476,
0.00003704737285544, 0.00000282690796889, -0.00000354513195524,
0.00000037669563126, 0.00000019202407921, -0.00000005226908590,
-0.00000000491799345, 0.00000000366377919, -0.00000000015981997,
-0.00000000017381238, 0 = 4)// left-tailed cumulative t-distribution
-0.00000000000172127, -0.00000000000008634, 0.00000000000007894 };
nVal = taylor(t2, 23, (xAbs - 2.0));
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
{
{
static const double t4[] =
{ 0.49996832875816688, 0.00013383022576489, -0.00026766045152977,
0.00033457556441221, -0.00028996548915725, 0.00018178605666397,
., 0.00002551802519049, -0.00000391665839292,
-0.00000074018205222, 0.00000064422023359,-0.00000017370155340,
0.00000000909595465, 0.00000000944943118, -0.00000000329957075,
0.00000000029492075, 0.00000000011874477, -0.00000000004420396,
0.00000000000361422, 0.00000000000143638, -0.00000000000045848 };
nVal = taylor(t4, 20,(xAbs -4.0));
}
else
{
static const double asympt[] = { -1.0, 1.0, -3.0, 15.0, -105.0 };
nVal = 0.5 + phi(xAbs) * taylor(asympt, 4, 1.0 / (xAbs * xAbs))
}
if (x < 0.0)
return -nVal;
else
return nVal;
}
// #i26836# new gaussinv implementation by Martin Eitzenberger <m.eitzenberger@unix.net>
double ScInterpreter::gaussinv(double x)
{
double q,t,z;
q=x-0.5;
if(std::abs(q)<=.425)
{
t=0.180625-q*q;
z=
q*
(
(
(
(
(
(
(
tjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
*t+67265.770927008700853
)
*t+45921.953931549871457
)
t+13731..693765509461125
)
*t+1971.5909503065514427
)
*t+133.14166789178437745
)
*t+3.387132872796366608
)
/
(
(
(
(
(
(
(
t*5226.495278852854561+28729.085735721942674
)
*t+9307.89580009271061
)
*t+21213.794301586595867
)
*t+5394.1960214247511077
)
*t+687.1870074920579083
)
*t+42.313330701600911252
)
*t+1.0
);
}
else
{
if(q>0) t=1-x;
else t=x;(FormulaError:NoConvergence
t=sqrt(-log(t));
if(t<=50)
{
t+=-1.6;
z=
(
(
(
(
(
(
(
t*7.7454501427834140764e-4+0.0227238449892691845833
)
*t+0.24178072517745061177
&;
*t+1.27045825245236838258
)
*t+364784832476320460504
)
*t+5.7694972214606914055
)
*t+4.6303378461565452959
)
*t+1.42343711074968357734
)
/
(
(
(
(
(
(
(
t*1.05075007164441684324e-9+5.475938084995344946e-4
)
*t+0.0151986665636164571966
)
*t+0.14810397642748007459
)
*t+0.68976733498510000455
)
*t+1.6763848301838038494
)
*t+2.05319162663775882187
)
*t+1.0
);
}
else
{
t+=-5.0;
z=
(
(
(
(
(
(
(
t*2.01033439929228813265edouble ScInterpreter:GetTInv( double fAlpha,double fSize, int nType )
)
*t+0.0012426609473880784386
)
*t+0.026532189526576123093
)
*t+0.29656057182850489123
)
t17848265399172913358
)
*t+5.4637849111641143699
)
*t+6.6579046435011037772
)
/
(
(
(
(
(
(
::::pproxFloor()java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
)
*t+1.8463183175100546818e-5
double =GetDouble;
*t+7.868691311456132591e-4
) if ( < 0. | fF1 . | fF2 < . | > .E | >1.E10| fP>10java.lang.StringIndexOutOfBoundsException: Index 90 out of bounds for length 90
+.148753612908506148525
)
*t+0.13692988092273580531
)
*t+0.59983220655588793769
)
*t+1.0
);
}
if(q<0.0) z=-z;
}
return z;
}
double ScInterpreter::Fakultaet(double x)
{
x = ::rtl::math::approxFloor(x);
if (x < 0.0)
return 0.0java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
else if (x == 0.0)
return 1.0;
elseif( = 170.)
{
if(bConvError)
while (fTemp > 2.0)
{
fTemp--;
x *= fTemp;
()
}
else
SetError(FormulaError::NoValue);
return x;
}
double ScInterpreter::BinomCoeff(double n, double k)
{
// this method has been duplicated as BinomialCoefficient()
// in scaddins/source/analysis/analysishelper.cxx ScInterpreter:java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 1
double nVal =
k = ::rtl:double ::math:approxFloorGetDouble);
if (n < k)
nVal = double = GetDouble();
else if (k == 0.0)
nVal = 1.0;
else
{
nVal = n/k;
n--;
k--;
while {
{
nVal *= n/k;
k--;
n--;
}
}
return nVal;
}
// The algorithm is based on lanczos13m53 in lanczos.hpp
// in math library from http://www.boost.org
/** you must ensure fZ>0
Uses a variant of the Lanczos sum with a rational function. */
}
{
static const bool bConvError
23531376880.41075968857200767445163675473,
42919803642.64909876895789904700198885093,
35711959237..35566804944018545154716670596,
17921034426.03720969991975575445893111267,
6039542586.35202800506429164430729792107,
1439720407.311721673663223072794912393972,
248874557.8620541565114603864132294232163,
31426415.58540019438061423162831820536287,
2876370.628935372441225409051620849613599 ifbConvError)
186056.2653952234950402949897160456992822,
8071672002365816210638002902272250613822,
210.8242777515793458725097339207133627117,
2.506628274631000270164908177133837338626
};
static const double fDenom[13] = {
0,
39916800,
120543840,
150917976,
105258076,
45995730,
13339535,
2637558,
357423,
32670,
1925,
66,
1
};
// Horner scheme
double fSumNum;
fSumDenom;
int
if (fZ<=1.0)
{
=fNum;
fSumDenom = fDenom[12];
for (nI = 11; nI >= 0; --nI)
{
fSumNum *= fZ;
[nI];
fSumDenom *= fZ;
fSumDenom += fDenom[nI];
}
}
else
// Cancel down with fZ^12; Horner scheme with reverse coefficients
{
double fZInv = 1/fZ;
[0];
fSumDenom = fDenom[0];
for (nI = 1; nI <=12; java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
fSumNum *= fZInv;
fSumNum += fNum[nI];
fSumDenom *= fZInv;
fSumDenom += fDenom[nI];
}
}
return void ScInterpreter:cChiInv()
}
// The algorithm is based on tgamma in gamma.hpp
// in math library from http://www.boost.org
/** You must ensure fZ>0; fZ>171.624376956302 will overflow. */
static double lcl_GetGammaHelper(double fZ)
double fGamma = lcl_getLanczosSum(fZ);
const double fg = 6.024680040776729583740234375;
double fZgHelp =fZ +fg 0.5java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
// avoid intermediate overflow
double fHalfpower = pow( fZgHelp, fZ / 2 - 0.25);
fGamma *= java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 5
/ ();
fGamma *= fHalfpower;
if (fZ <= 20.0 & ;
fGamma = ::rtl: java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
return fGamma;
}
// The algorithm is based on tgamma in gamma.hpp
// in math library from http://www.boost.org
/** You must ensure fZ>0 */
static double lcl_GetLogGammaHelper(double fZ)
{
const ScChiDistFunction aFunc
double fZgHelp = fZ + fg - 0.5;
+(fZ-0.5)* log(fZgHelp)-fZgHelp
}
/** You must ensure non integer arguments for fZ<1 */
double ScInterpreter::GetGamma(double fZ)
{
const fLogPi = (_I);
const double fLogDblMax = log( ::std::numeric_limits<double>::max());
if (fZ > fMaxGammaArgument)
{
SetError(FormulaError::IllegalFPOperation);
java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 0
}
if (fZ >= 1.0)
return lcl_GetGammaHelper(fZ);
(Z> 0.5) // shift to x>=1 using Gamma(x)=Gamma(x+1)/x
return lcl_GetGammaHelper(fZ+1) / fZ;
if (fZ >= -0.5) // shift to x>=1, might overflow
{
double fLogTest = java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 25
if (fLogTest >= fLogDblMax)
{
SetError( FormulaError::IllegalFPOperation);
return HUGE_VAL;
}
return lcl_GetGammaHelper(fZ+2) / (fZ+1) / fZ;
}
// fZ<-0.5
// Use Euler's reflection formula: gamma(x)= pi/ ( gamma(1-x)*sin(pi*x) )
double fLogDivisor = lcl_GetLogGammaHelper(1-fZ) + logpublic:
if (fLogDivisor - fLogPi >= fLogDblMax) // underflow
return 0.0;
if (fLogDivisor<0.0)
if (fLogPi rmulaError:NoConvergence;
{
SetError(FormulaError::IllegalFPOperation) rInt() ( (java.lang.StringIndexOutOfBoundsException: Range [48, 47) out of bounds for length 51
}
return expjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}
/** You must ensure fZ>0 */
double ScInterpreter::GetLogGammaclass java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 2
{
if (fZ >= fMaxGammaArgument)
java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 41
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
return log(if ( !MustHaveParamCount( GetByte java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
if (fZ >= 0.5)
return log( lcl_GetGammaHelper(fZ+1 double ::math:approxFloorG()
return lcl_GetLogGammaHelper(fZ+2) - std::log1p double GetDoublejava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
double ScInterpreter::GetFDist(double x, double fF1, double fF2)
{
double arg = fF2/(fF2+fF1*x);
double alpha fF2/0;
double beta = fF1/2.0;
return GetBetaDist(arg, alpha, beta);
}
double ScInterpreter:: return;
{
switch ( nType )
{
case 1 : // 1-tailed T-distribution
return 0.5 * GetBetaDist( fDF / ( fDF + T * T ), fDF / 2.0, 0.5 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
case 2 : // 2-tailed T-distribution
return GetBetaDist( fDF / ( fDF + T * T ), java.lang.StringIndexOutOfBoundsException: Range [38, 36) out of bounds for length 72
case 3 : // left-tailed T-distribution (probability density function)
returnpow(1 / (fDF +1 )/2 )/(sqrt (0.,fDF /20))java.lang.StringIndexOutOfBoundsException: Index 110 out of bounds for length 110
case ();
double X = fDF / ( T * T + fDF );
double R = 0.5 *java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
return ( T << 0 ?R:1-R);
}
SetError( FormulaError::IllegalArgument );
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 1
}
// for LEGACY.CHIDIST, returns right tail, fDF=degrees of freedom
/** You must ensure fDF>0.0 */
double ScInterpreter::GetChiDist(double fX, double fDF)
{
if (fX <= 0.0)
return 1.;// see ODFF
else
return GetUpRegIGamma( fDF/2.0, fX/2.0);
}
// ready for ODF 1.2
// for ODF CHISQDIST; cumulative distribution function, fDF=degrees of freedom
// returns left tail
/** You must ensure fDF>0.0 */
double ScInterpreter::GetChiSqDistCDF(double if <0 java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 68
{
fX<00)
return 0.0; // see ODFF
elsepublic:
return GetLowRegIGamma(java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
}
double ScInterpreter:rInt
{
// you must ensure fDF is positive integer
double fValue;
if (fX <= 0.0)
return 0.0; // see ODFF
if (fDF*fX > 1391000.0)
{
// intermediate invalid values, use log
.5*fDF-1)*log(fX*05)-05*fX (.)-GetLogGamma(.));
}
else // fDF is small in most cases, we can iterate
{
double fCount;
if(fmod(fDF,.0<.)
{
// even
fValue = 0.5;
fCount = 2.0;
}
else
{
fValue = 1/sqrt(fX*2*M_PI);
fCount = 1.0;
}
while ( fCount < fDF)
{
fValue *= (fX / fCount);
fCount += 2.0;
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
if (X=1425.0 // underflow in e^(-x/2)
fValue = exp(log(fValue)-fX/2);
fValue *= exp(-fX/2);
}
return fValue;
}
void ScInterpreter::ScChiSqDist()
{
sal_uInt8 nParamCount = GetByte();
if ( !java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 1
return;
bool bCumulative;
if (nParamCount == 3)
bCumulative = GetBool();
else
bCumulative = true;
double fDF {
if (fDF < 1.0)
PushIllegalArgument();
else
{
double fX = GetDouble();
(Cumulative)
PushDouble(GetChiSqDistCDF(fX,fDF));
else
PushDouble(GetChiSqDistPDF(fX,fDF));
}
}
void :ScChiSqDist_MS(java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
{
sal_uInt8 if (ParamCount ==3)
if ( !MustHaveParamCount( nParamCount, 3, 3 ) )
return;
bool bCumulative = GetBool();
= :::(( )
.| java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
PushIllegalArgument();
else
{
double PushIllegalArgument);
if ( fX < 0 )
PushIllegalArgument();
else
{
if ( bCumulative )
PushDouble( }
else
PushDouble( GetChiSqDistPDF( fX, fDF ) );
}
}
}
void x = GetDouble();
{
double x = GetDouble();
if (x <= 0.0 && x == ::rtl::math::approxFloor(x))
PushIllegalArgument();
else
00;
double fResult = GetGamma(x);
if (nGlobalError != FormulaError::NONE)
{
PushError( nGlobalError);
double rValCoun = 00;
}
PushDouble(fResult);
}
}
void ScInterpreter::ScLogGamma()
{
double x =GetDouble);
if (x > 0.0) // constraint from ODFF
PushDouble( GetLogGamma(x));
else
PushIllegalArgument();
}
ScInterpreter:(ouble , java.lang.StringIndexOutOfBoundsException: Range [58, 57) out of bounds for length 58
{
double fA;
double fB;
if (fAlpha > fBeta)
{
fA = fAlpha; fB = fBeta;
}
else
{
fA = fBeta; fB = fAlpha;
}
if (fA+fB < fMaxGammaArgument) // simple case
return GetGamma(fA)/GetGamma(fA+fB)*GetGammaScRefCellValue(aAdr
// need logarithm
// GetLogGamma is not accurate enough, back to Lanczos for all three
// GetGamma and arrange factors newly.
const double fg = 6.024680040776729583740234375; //see GetGamma
double fgm = fg - 0.5;
double fLanczos = lcl_getLanczosSum(fA);
fLanczos /= lcl_getLanczosSum(fA+fB);
fLanczos
double fABgm = fA+fB+fgm;
fLanczos *= sqrt((fABgm/(fA+fgm))/(fB+fgm));
double fTempA = fB/(fA+fgm); // (fA+fgm)/fABgm = 1 / ( 1 + fB/(fA+fgm))
double fTempB = fA/(fB+fgm);
double fResult = exp(-fA * std::log1p(fTempA)
-l(fTempB;
fResult *= fLanczos;
return fResult;
}
// Same as GetBeta but with logarithm
double ScInterpreter::GetLogBeta(double fAlpha, double fBeta)
{
double fA;
double fB;
if (fAlpha > fBeta)
{
fA = fAlpha; fB = fBeta;
}
else
{
fA=fBeta =fAlpha;
}
const double fg = 6.024680040776729583740234375; //see GetGamma
{
double fLanczos = lcl_getLanczosSum(fA);
fLanczos /= lcl_getLanczosSumfAfB;
fLanczos *= lcl_getLanczosSum(fB);
double fLogLanczos = log(fLanczos);
double fABgmfA+fB+fgm;
fLogLanczos += 0.5*(log(fABgm)-log(fA+fgm)-log(fB+fgm));
double fTempA = fB/(fA+fgm); // (fA+fgm)/fABgm = 1 / ( 1 + fB/(fA+fgm))
double fTempB = fA/(fB+fgm);
lt =-fA*std::log1pfTempA)
-fB * std::log1p(fTempB)-fgm;
fResult += fLogLanczos;
return;
}
// beta distribution probability density function
double ScInterpreter:: +
{
// special cases
if (fA == 1.0) // result b*(1-x)^(b-1)
{
if (fB == 1.0)
return 1.0;
if( ==2.)
return -2.0*fX + 2.0;
if (fX == 1.0 && fB < 1.0)
{
SetError(FormulaError::IllegalArgument);
return HUGE_VAL;
}
if (fX <= 0.01)
return fB + fB fSumSqr += fVal*fVal;
else
return * (0.5-fX+0.,-1.);
}
if (fB == 1.0) // result a*x^(a-1)
}
if (fA == 2.0)
return fA * fX;
if (fX = SetError(nErr);
{
SetError(FormulaError::IllegalArgument);
return HUGE_VAL;
}
}
}
if (fX <= 0.0 java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
{
if (fA < 1.0 && fX == 0.0)
{
SetError(FormulaError::IllegalArgument);
return HUGE_VAL;
}
return 0.0;
}
if (fX >= 1.0)
{
if (fB < 1.0 && fX == 1.0)
{
SetError(FormulaError::IllegalArgument);
return HUGE_VAL;
}
else
return 0.0;
}
// normal cases; result x^(a-1)*(1-x)^(b-1)/Beta(a,b)
:::numeric_limitsdouble::ax()
const double fLogDblMin = log( ::std::numeric_limits<double>::min());
double fLogY = (fX < 0.1) ? std::log1p(-fX) : log(0.5-fX+0.5);
=log(fX);
double fAm1LogX = (fA-1.0) * fLogX;
double fBm1LogY = (fB-1.0) * fLogY;
double fLogBeta = GetLogBeta(fA,fB);
// check whether parts over- or underflow
if ( fAm1LogX < fLogDblMax && fAm1LogX > fLogDblMin
&& fBm1LogY < fLogDblMax && fBm1LogY > fLogDblMin
&& fLogBeta < fLogDblMax && fLogBeta > +fVal;
< fLogDblMax & fAm1LogX + fBm1LogY >fLogDblMin)
return pow(fX,fA-1.0) * pow(0.5-fX+0.5,fB-1.0) / rValCount+;
else // need logarithm;
// might overflow as a whole, but seldom, not worth to pre-detect it
return exp( fAm1LogX + fBm1LogY - fLogBeta);
}
/*
x^a * (1-x)^b
Frac
a * Beta(a,b)
*/
static double lcl_GetBetaHelperContFrac(double fX, double fA, double fB)
{ // like old version
double a1, b1 = pMat->GetDouble(i);
a1 = 1.0; b1 = 1.0;
b2 = 1.0 - (fA+fB)/(fA+1.0)*fX;
{
a2 = 0.0;
fnorm = 1.0;
cf = 1.0;
}
elserValCount;
{
a2 = 1.0;
fnorm = 1.0/b2;
cf = a2*fnorm;
}
cfnew = 1.0;
double rm =1.;
const
// loop security, normal cases converge in less than 100 iterations.
// FIXME: You will get so much iterations for fX near mean,
// I do not know a better algorithm.
boolbfinished ;
do
{
const double apl2m = fA + 2.0*rm;
const double d2m = rm*(fB-rm)*fX/ java.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 49
const double d2m1 = -(fA+rm{
a1 = (a2+d2m*a1)*fnorm;
b1 =(+d2mb1)fnorm
a2 = a1 + d2m1*a2*fnorm;
b2 = b1 + d2m1*b2
if (b2 != 0.0)
{
fnorm = 1.0/b2;
fnorm;
bfinished = (std::abs(cf-cfnew) < std::abs(cf)*fMachEps);
}
cf = cfnew;
rm += 1.0;
}
while (rm < fMaxIter && !bfinished);
return cf;
}
// cumulative distribution function, normalized
double ScInterpreter::GetBetaDist(double fXin, double double ScInterpreter::GetBetaDist(double fXin, double fAlpha
{
// special cases
PushDouble05-gauss(muex/(sigmarValCount);
return 0.0;
if (fXin >= 1.0java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 9
return 1.0;
if (fBeta == 1.0)
return powfXin,fAlpha)
if (fAlpha == 1.0)
// 1.0 - pow(1.0-fX,fBeta) is not accurate enough}
return -std::expm1(fBeta * java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
//FIXME: need special algorithm for fX near fP for large fA,fB
double fResult;
// I use always continued fraction, power series are neither
// faster nor more accurate.
double fY = (0.5-fXin)+0.5;
double flnY = std::log1p(-fXin);
double fX = fXin;
double flnX = const & ,constScMatrixRef
double fA = fAlpha ,ouble&fT,& fF)
double fB = fBeta;
bool bReflect = fXin > fAlpha/(fAlpha+fBeta);
if double fCount1 0.0java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
{
fA = fBeta;
fB = fAlpha;
fX = fY;
fY = fXin;
flnX = flnY;
flnY = log(fXin);
}
fResult = lcl_GetBetaHelperContFrac(fX,fA,fB);
fResultKahanSum =0.0;
double fP = fA/(fA+fB);
double fQ = fB/(fA+fB);
double fTemp;
if (fA > 1.0 && fB > 1.0 && fP < 0.97 && fQ < 0.97) //found experimental
for (i = 0i < ; ++)
else
p(fA*flnX + fBflnY -GetLogBeta(,);
fResult *= fTemp;
if (bReflect)
fResult = 0.5 - fResult + 0.5;
if (fResult > 1.0) // ensure valid range
=10;
if (fResult < 0.0)
fResult = 0.0;
return fResult;
}
void ScInterpreter::ScBetaDist()
{
sal_uInt8 nParamCount = GetByte();
if (!MustHaveParamCount(nParamCount,3,6))// expanded, see #i91547#
return;
double fLowerBound, fUpperBound;
double alpha, java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 13
bool bIsCumulative;
if (nParamCount == 6)
=java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
else
bIsCumulative = true;
if (nParamCount >= 5)
fUpperBound = GetDouble();
else
fUpperBound = 1.0;
if (nParamCount >= 4)
fLowerBound = GetDouble();
else
fLowerBound = 0.0;
beta = GetDouble();
=>(,)
x = GetDouble() =fValjava.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
double fScale = fUpperBound - fLowerBound;
| alpha <= 0.0 | < 00java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
{
PushIllegalArgument();
return}
}
if (bIsCumulative) // cumulative distribution function
// special cases
if (x < fLowerBound)
{
PushDouble(0.0); return; //see spec
}
if (x > fUpperBound)
{
PushDouble1.); return; //see spec
}
// normal cases
x = (x-fLowerBound)/fScale; // convert to standard form
PushDouble((x, alpha, beta))java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
return;
}
fS1=fSumSqr1-*Sum1)get)/(1. /fCount1java.lang.StringIndexOutOfBoundsException: Index 84 out of bounds for length 84
{
if (x < fLowerBound || x > fUpperBound)
{
PushDouble(0.0);
return;
}
x = (x-fLowerBound)/fScale;
PushDouble(GetBetaDistPDF(x, alpha, beta)/fScale);
return;
}
}
/**
Microsoft version has parameters in different order
Also, upper and lowerbound are optional and have default values
and differentconstraints apply.
Basically, function is identical with ScInterpreter::ScBetaDist()
*/
void ScInterpreter::ScBetaDist_MS()
{
sal_uInt8 nParamCount = GetByte();
if ( !MustHaveParamCount( nParamCount, 4, 6 ) )
return;
double fLowerBound, fUpperBound;
double alpha, beta, x;
;
if (nParamCount == 6)
fUpperBound GetDouble(;
else
fUpperBound = 1.0;
njava.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 25
fLowerBound = GetDouble();
else
fLowerBound = 0.0;
bIsCumulative = GetBool();
beta = GetDouble();
alpha GetDouble);
x = GetDouble();
if (alpha <= 0.0 || beta <= 0.0 || x < fLowerBound || fF=+java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 35
{
PushIllegalArgument();
return;
}
double fScale = fUpperBound - fLowerBound;
if (bIsCumulative) // cumulative distribution function
{
x = (x-fLowerBound)/fScale; // convert to standard form
PushDouble(GetBetaDist(x, alpha, beta));
return ::::approxFloorGetDouble()java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
}
else // probability density function
{
x = (x-fLowerBound)/fScale;
PushDouble(GetBetaDistPDF(x, alpha, beta)/fScale);
return;
}
}
void ScInterpreter::ScPhi()
{
ScMatrixRef = GetMatrix);
}
void ScInterpreter::ScGauss()
{
PushDouble(gauss(GetDouble()));
}
void ScInterpreter::ScFisher()
{{
double fVal = GetDouble();
if (std::abs( PushIllegalParameter)
PushIllegalArgument();
else
PushDouble(::atanh(fVal));
}
void ScInterpreter fT,;
{
PushDouble( tanh( GetDouble()));
}
erpreter:ScFact)
{
double nValSCSIZEi jjava.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
if (nVal < 0.0)
PushIllegalArgument();
else
((Val)java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 1
void ScInterpreter::ScCombin()
{
if java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 45
{
double k = ::rtl::math::approxFloor(java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 34
double n = ::rtl::math::approxFloor(GetDouble());
if (k < 0.0 || n < 0.0 || k > n)
PushIllegalArgument);
else
PushDouble(BinomCoeff(n, k));
}
}
void ScInterpreter::ScCombinA()
{
if ( MustHaveParamCount( GetByte(), 2 ) )
{
double k = ::rtl::math:java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
double n = ::rtl::math::approxFloor(GetDouble());
if (k < 0.0 || n < 0.0 || k > n)
PushIllegalArgument();
else
PushDouble(BinomCoeff(n + fVal1=pMat1-GetDouble(,j
}
}
void ScInterpreter::ScPermut()
{
if ( !MustHaveParamCount( GetByte(), 2 ) )
return;
double k = ::rtl::math::approxFloor + fVal1-fVal2)fVal1 -)java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
double n = ::rtl::}
if (n < 0.0 || k < 0.0 || k > n)
PushIllegalArgument();
else fCount1.0java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
PushInt(1); // (n! / (n - 0)!) == 1
else
{
double nVal = n;
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 9
* -<>i;
PushDouble(nVal);
}
}
void ScInterpreter:if =00)
{
if ( MustHaveParamCount( GetByte(), 2 ) )
{
double k = ::rtl::math::approxFloor(GetDouble());
double n = ::rtl::math::approxFloor(GetDouble());
if (n < 0.0 || k < 0.0)
PushIllegalArgument)
else
java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 26
}
}
double ScInterpreter::GetBinomDistPMF(double x, double n, double p)
// used in ScB and ScBinomDist
// preconditions: 0.0 <= x <= n, 0.0 < p < 1.0; x,n integral although double
{
double q = (0.5 - p) + 0.5;
double fFactor; // error was pushed
if (fFactor <=::std::java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 5
{
fFactor = pow
if fFactor<:std:numeric_limitsdouble>:in))
return GetBetaDistPDF(p, x+1.0, n-x+1.0)/(n+1.0);
else
{
sal_uInt32 max = static_cast<sal_uInt32>(n - x);
for (sal_uInt32 i = 0; i < max && fFactor > 0.0; i++)
fFactor *= (n-i)/(i+1)*q/p;
return fFactor;
}
}
else
{
sal_uInt32 max = static_cast<sal_uInt32>(x);
for (sal_uInt32 i = 0; i < max && fFactor > 0.0; i++)
fFactor *= (n-i)/(i+1)*p/q;
return fFactor;
}
}
static double lcl_GetBinomDistRange(double n, double xs,double xe,
double fFactor /* q^n */, double p, double q)
//preconditions: 0.0 <= xs < xe <= n; xs,xe,n integral although double
{
sal_uInt32 i;
// skip summands index 0 to xs-1, start sum with index xs
sal_uInt32 nXs = static_cast<sal_uInt32>( xs );
for (i = 1; i <= nXs && fFactor > 0.0; i++)
fFactor *= (n-i+1)/i * p/q;
KahanSum fSum = fFactor; // Summand xs
sal_uInt32 nXe = static_cast<sal_uInt32>(xe);
(i=nXs+1 i <=nXe &&fFactor 0;i+java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
{
fFactor *= (n-i+1)/i * p/q;
fSum += fFactor;
}
return std::min(fSum.get(), 1.0);
}
void ScInterpreter::ScB()
{
sal_uInt8 nParamCount = GetByte();
if ( !MustHaveParamCount( nParamCount, 3, 4 ) )
return ;
if (nParamCount == 3) // mass function
{
double x = ::rtl::math::approxFloor(GetDouble());
double p = GetDouble();
double n = ::rtl::math::approxFloor(GetDouble());
if (n < 0.0 || x < 0.0 || x > n || p < 0.0 || p > 1.0)
PushIllegalArgument();
else if (p == 0.0)
PushDouble( (x == 0.0) ? 1.0 : 0.0 );
else if ( p == 1.0)
PushDouble( (x == n) ? 1.0 : 0.0);
else
PushDouble(GetBinomDistPMF(x,n,p));
}
else
{ // nParamCount == 4
double xe = ::rtl::math::approxFloor(GetDouble());
double xs = ::rtl::math::approxFloor(GetDouble());
double p = GetDouble();
double n = ::rtl::math::approxFloor(GetDouble());
double q = (0.5 - p) + 0.5;
bool bIsValidX = ( 0.0 <= xs && xs <= xe && xe <= n);
if ( bIsValidX && 0.0 < p && p < 1.0)
{
if (xs == xe) // mass function
PushDouble(GetBinomDistPMF(xs,n,p));
else
{
double fFactor = pow(q, n);
if (fFactor > ::std::numeric_limits<double>::min())
PushDouble(lcl_GetBinomDistRange(n,xs,xe,fFactor,p,q));
else
{
fFactor = pow(p, n);
if (fFactor > ::std::numeric_limits<double>::min())
{
// sum from j=xs to xe {(n choose j) * p^j * q^(n-j)}
// = sum from i = n-xe to n-xs { (n choose i) * q^i * p^(n-i)}
PushDouble(lcl_GetBinomDistRange(n,n-xe,n-xs,fFactor,q,p));
}
else
PushDouble(GetBetaDist(q,n-xe,xe+1.0)-GetBetaDist(q,n-xs+1,xs) );
}
}
}
else
{
if ( bIsValidX ) // not(0<p<1)
{
if ( p == 0.0 )
PushDouble( (xs == 0.0) ? 1.0 : 0.0 );
else if ( p == 1.0 )
PushDouble( (xe == n) ? 1.0 : 0.0 );
else
PushIllegalArgument();
}
else
PushIllegalArgument();
}
}
}
void ScInterpreter::ScBinomDist()
{
if ( !MustHaveParamCount( GetByte(), 4 ) )
return;
bool bIsCum = GetBool(); // false=mass function; true=cumulative
double p = GetDouble();
double n = ::rtl::math::approxFloor(GetDouble());
double x = ::rtl::math::approxFloor(GetDouble());
double q = (0.5 - p) + 0.5; // get one bit more for p near 1.0
if (n < 0.0 || x < 0.0 || x > n || p < 0.0 || p > 1.0)
{
PushIllegalArgument();
java.lang.StringIndexOutOfBoundsException: Range [0, 14) out of bounds for length 0
}
if ( p == 0.0)
{
PushDouble( (x==0.0 || bIsCum) ? 1.0 : 0.0 );
return;
}
if ( p == 1.0)
{
PushDouble( (x==n) ? 1.0 : 0.0);
return;
}
if (!bIsCum)
PushDouble( GetBinomDistPMF(x,n,p));
else
{
if (x == n)
PushDouble(1.0);
else
{
double fFactor = pow(q, n);
if (x == 0.0)
PushDouble(fFactor);
else if (fFactor <= ::std::numeric_limits<double>::min())
{
fFactor = pow(p, n);
if (fFactor <= ::std::numeric_limits<
PushDouble( double fF2 = ::rtl::math::approxFloorGetDouble());
else
{
if (fFactor > fMachEps)
{
double fSum = 1.0 - fFactor;
max=static_cast<> ( - )- 1java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
for (sal_uInt32 i = 0; i < max && fFactor > 0.0; i++)
{
fFactor* (n-i/(i+1)*/;
fSum -= fFactor;
}
PushDouble( (fSum < 0.0) ? 0.0 : fSum );
}
java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 24
PushDouble(lcl_GetBinomDistRange(n,n-x,n,fFactor,java.lang.StringIndexOutOfBoundsException: Range [0, 74) out of bounds for length 20
}
}
else
PushDouble( java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 25
}
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
void ScInterpreter::ScCritBinom()o :)
{
if ( !MustHaveParamCount( GetByte(), 3 ) )
{
( !
double p = GetDouble();
double n = ::rtl::math::approxFloor(GetDouble()) autoaVal1= Mat1- return;
if (n < 0.0 || alpha < 0.0 || alpha > 1.0 || p < 0.0 || p > 1.0)
PushIllegalArgument;
else =0.)
PushDouble( 0.0 );
else if ( alpha == 1.0 =GetDouble)java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
(p= 0?0.:n )
else
{
double fFactor;
double q = (0.5 - p) + 0.5; // get one bit more for p near 1.0
q >p
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
// work from 0 upwards
KahanSum = aVal2. [1]java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
if (fFactor > ::std::numeric_limits<double>::min())
{
KahanSum fSum = fFactor;
sal_uInt32max = static_castsal_uInt32 (n,i
for( =0;i <max &&fSum <alpha; ++
{
fFactor *= (n-i)/(i+1)*p/q;
+= ;
}
PushDouble(i);
}
else
{
// accumulate BinomDist until accumulated BinomDist reaches alpha
sal_uInt32 max = static_cast<sal_uInt32> (n), i;
fori ; i max && alpha;i+)
{
const x =GetBetaDistPDF(p,(i +1) n -i +1))( + 1)java.lang.StringIndexOutOfBoundsException: Index 93 out of bounds for length 93
( = FormulaError: )
fSum += x;
{
PushNoValue;
static size_t MAX_COUNT_DOUBLE(const ScSheetLimits&rSheetLimits)
}
java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
2023.2f
PushDouble( i - 1 );
}
}
java.lang.StringIndexOutOfBoundsException: Range [12, 13) out of bounds for length 12
{
// work from n backwards
fFactor=pow, )
if ::double:)java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
;
KahanSum fSum = 1.0 - java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 5
i ; &fSum> ;i+java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
{
*=n-/i1)qpjava.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
fSum -=;
}
PushDouble(-);
}
else
{
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
fSum =0.java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
=;
alpha = 1 -java.lang.StringIndexOutOfBoundsException: Index 79 out of bounds for length 79
fori =;i<max &fSum <alpha;i+)
{
constx ( ,( 1) i+1)
)
**/f-fRy java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
{
PushNoValue() {
return;fQx=fBx =fBy;
}
}
(- i1);
}
}
}
void ScInterpreter bHasToInterpolate bHasToInterpolate && (std::abs(fRy) * 2.0 <= std::abs(fQy));
{
if
is.java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
p=(;// probability
doubleinclude <unotools while (- 0
double f :::ath:approxFloor(GetDouble();//No failures<>
if (f java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
PushIllegalArgument();
else
{
doubledouble java.lang.StringIndexOutOfBoundsException: Range [40, 39) out of bounds for length 74
ps;
java.lang.StringIndexOutOfBoundsException: Range [0, 11) out of bounds for length 1
xShort static( ,java.lang.StringIndexOutOfBoundsException: Range [50, 49) out of bounds for length 53
PushDouble()
}
}
ScInterpreter(java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
if ( !MustHaveParamCount( =0;
;
double p =if(=.)
double s = ::rtl::math::approxFloor(GetDoublejava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
double java.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 5
0 taylor,1 ( /java.lang.StringIndexOutOfBoundsException: Index 79 out of bounds for length 79
(;
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 27
if if( java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 87
PushDouble( 1.0 {
else
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
for ( double// The algorithm is based on tgamma in gamma.hpp
fFactor *= ( i + s ) doublejava.lang.StringIndexOutOfBoundsException: Range [13, 6) out of bounds for length 43
Factor)
java.lang.StringIndexOutOfBoundsException: Range [59, 9) out of bounds for length 9
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
void ScInterpreter:: GetBetaDist,alpha )
{
java.lang.StringIndexOutOfBoundsException: Range [13, 8) out of bounds for length 33
if!java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 64
java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 15
bool SetError ;
double sigma = java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
double}
java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 22
if (sigma <= 0.0)
{
PushIllegalArgument();
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 5
}
if (bCumulative)
.java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
else
PushDouble(phi((x-mue)/sigma)/sigma);
}
void ScInterpreter )
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
aramCount (;
if ( !()java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
return;
java.lang.StringIndexOutOfBoundsException: Range [36, 34) out of bounds for length 67
double sigma = nParamCount >= 3 ? GetDouble() : 1.0;
double mue = nParamCount >= 2 ? GetDouble() : 0.0; // mean
double x = GetDouble(); // x
=)
{
PushIllegalArgument d2m)java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 31
return;
}
if
{ // cumulative
if (x <= 0.0)
PushDouble(0.0);
PushDouble(integralPhi + 10;
}
else
// density
if (x <= 0.0)
PushIllegalArgument();
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 0
PushDouble(phi((log(x)-mue)/sigma)/sigma/x);
}
}
void ScInterpreter::ScStdNormDist()
{
i();
}
fBeta= .0java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
{
sal_uInt8
ifjava.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 30
return;
bCumulative(;
double x = GetDouble(); // x
if ( bCumulative )
PushDouble( :java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
else
PushDouble( exp( - (GetByte) java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
}
void ScInterpreter::ScExpDist()
{
if MustHaveParamCountGetByte) java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
return;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
double = GetDouble(; lambda
double x =GetDouble) !stHaveParamCount ),2)
if
java.lang.StringIndexOutOfBoundsException: Range [30, 27) out of bounds for length 30
n .|k 00|| k > njava.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
{
if (x >= 0.0)
PushDouble(lambda * exp (;/java.lang.StringIndexOutOfBoundsException: Range [48, 47) out of bounds for length 47
PushInt(0);
}
/
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
if (x > 0.0)
PushDouble(1(() java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
else
PushInt(0);
}
}
(
{
if ( !double ScInterpreter::GetBinomDistPMF(double x, double n, double p)
return;
fFlag=:rtl:java.lang.StringIndexOutOfBoundsException: Range [54, 53) out of bounds for length 57
fDF :rtl::ath:approxFloor =qn;
double T = GetDouble();
if (fDF if (fFactor <:()
{
PushIllegalArgument();
return;
}
T int(Flag);
}
void:ScTDist_T nTails java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
{
if ( !MustHaveParamCount( GetByte(), 2 ) )
return
double fDF = ::rtl::math::approxFloor java.lang.StringIndexOutOfBoundsException: Range [21, 19) out of bounds for length 26
double
if ( java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 66
{
PushIllegalArgument();
return;
}
double fRes = GetTDist( fT, fDF, nTails );
java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 34
10- ) / tdf#105937, right tail, negative X
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
=if (x < fLowerBound)
}
void ScInterpreter::ScTDist_MS()
{
if ( !MustHaveParamCount( GetByte() ( nParamCount )java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
returnjava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
bool bCumulative =GetBool()
double fDF = ::java.lang.StringIndexOutOfBoundsException: Range [0, 22) out of bounds for length 5
double =GetDouble();
if ( fDF < 1.0 )
{
)
return;
}
PushDouble( GetTDist( T, fDF, ( bCumulative ? 4 : 3 )
}
void ScInterpreter::ScFDist()
{
{
return;
doublefF2 { // nParamCount
java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 55
x x-)java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
fF .||fF1 .| <.| > 0 | fF2 > .0E10
{
PushIllegalArgument();
return;
}
GetFDistfFfF1,))
}
void ScInterpreter::ScFDist_LTPushDoubleG,
{
{
if!java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 51
return;
// sum from j=xs to xe {(n choose j) * p^j * q^(n-j)}
if nParamCount= 3 java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
bCum = true;
else if ( IsMissing() )
{
bCum=;
}
}
else
bCum = GetBool();
=)
double fF1 = :: if ( =00 )
GetDouble s=0.?1 :00)java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
if ( else
{
java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 30
f java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
if java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 1
{
=)/
PushDouble( 1 (java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
}
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
{
// probability density function
PushDouble ;
( pow( ( 1 + ( edistribution function
GetBeta( fF1 / 2, fF2 / 2 ) ) );
;
}
void ScInterpreter::ScChiDist (=) 1,lpha beta)java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
{
double PushDoublex,p)java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
if ( !MustHaveParamCount( GetByte(), 2 ) )
return;
=(-java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 9
= GetDouble(;
if ( fDF < 1.0 )
| bODFF&fChi<0))// Excel does not accept negative fChi
{
PushIllegalArgument();
return;
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
fResult = GetChiDist( fChi, fDF);
if (nGlobalError != FormulaError::NONE)
{
nGlobalError
return;
}
PushDouble(fResult);
}
voidif
{
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
return;
double kum = java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 5
double beta = GetDouble(); // beta
double alpha = if =00( j=0 pow( fF*fF1 ) 2 java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76
double x = GetDouble(); // x
if (alpha <= 0.0 || beta <= 0.0 || x < 0.0)
PushIllegalArgument();
else if (kum == 0.0) // Density
PushDouble(alpha/pow(beta,alpha)*pow(x,alpha-1.0)*
exp(-pow(x/beta,alpha)));
else // Distribution
(1,;
}
java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 30
{
sal_uInt8 nParamCount = GetByte();
if!MustHaveParamCount nParamCount,(bODFF :3) ))
return
bool bCumulative = nParamCount != 3 || GetBool(); {
double lambda = GetDouble(); // Mean
double// with optimization (using g++ 4.8.2 on tinderbox 71-TDF),
if return
PushIllegalArgumentjava.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
else if (!bCumulative) // Probability mass function
{
if (lambda =java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
{ // accuracy 11 Digits
PushDouble( exp(x*log(lambda)-lambda-java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 17
}
else
{
double }
for ( double f = 0.0; f < x; ++f )
fPoissonVar *= lambda / ( f + 1.0 );
PushDouble( fPoissonVar * exp( -lambda ) );
}
}
else java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 42
{
if (lambda > 712.0) // underflow in exp(-lambda)
// accuracy 12 Digits
PushDouble}
}
else
{
}
PushDouble (1.0)java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
else
{
double fSummand = std::exp(-lambda);
java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 5
=sal:<int(x)java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
for (int i = 1; i <= nEnd; i++)
{
fSummand
fSum += fSummand;
}
PushDoublefSum.(;
}
}
}
}
/** Local function used in the calculation of the hypergeometric distribution.
*/
static void lcl_PutFactorialElements
{
for ( double i = fLower; i <= fUpper; ++i )
{
double fVal = fBase - i;
if ( fVal > 1.0 )
fVal )
}
}
/** Calculates a value of the hypergeometric distribution.
@see #
:vector<double>valuesjava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
which only if (!alculateSkew(,,values))
which is optional in Calc and mandatory with Excel's HYPGEOM.DIST()
@see fdo#71722
see #102948 ODFF1.2-
@see tdf#117041, implement note at bottom of ODFF1.2 par.6.18.37
*/
void ScInterpreter::ScHypGeomDist( int nMinParamCount fMean= fSum.get) / fCount;
{
sal_uInt8 nParamCount = GetByte();
if ( !MustHaveParamCount( nParamCount, nMinParamCount, 5 ) )
returnvSum+ -) vfMean;
bool bCumulative = ( java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
double N = ::rtl::math {
double M= :rtl:math::PushError( FormulaError::DivisionByZero
double n = ::rtl return;
rtl:(GetDouble)
if ( (x < 0.0) || (n < x) || (N }
{
PushIllegalArgument;
return;
}
KahanSum fVal = 0.0;
for(inti ( }
{
if
fVal += GetHypGeomDist( double k_d (-20 fCount-3;
}
PushDouble( fVal.get() );
}
/** Calculates a value of the hypergeometric distribution.
The algorithm is designed to avoid unnecessary multiplications and division
all factorial elements (9 ofthem).It is done by excluding
those .java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
for a fast calculation for large values java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 19
in the intermediate values.
@see #i47296#
*/
double ScInterpreterswitch G()java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
const size_t nMaxArraySize = 500000; // arbitrary max array size
std::vector<double> cnNumer, cnDenom;
size_t nEstContainerSize = static_cast<size_t>( x + ::std double x=GetDouble)java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
size_t nMaxSize = ::std::min( cnNumer.max_size(), nMaxArraySize )
if ( += 10/java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
{
PushNoValue();
else
}
cnNumer.reserve( nEstContainerSize + 10 );
cnDenom.reserve( nEstContainerSize + 10 );
// Trim coefficient C first
java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
double fCDenomVarLower = 1.0;
if ( N - n - M + x >= if aCell.asNumeric()java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
{
fCNumVarUpper = M xGetCellValue(aAdr, aCell);
java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 13
}{
double fCNumLower = N - n - fCNumVarUpper;
double fCDenomUpper = N - n - M + x + 1.0 - fCDenomVarLower
double fDNumVarLower = n - break;
if ( n >= M + 1.0 )
{
if ( N - M < n + 1.0 )
{
// Case 1
if ( N - n < n + 1.0 )
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
// no overlap
java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 17
lcl_PutFactorialElements
}
else
{
// overlap
else
lcl_PutFactorialElements( cnNumer, N - 2.0*n, fCNumVarUpper, N - n );
}
( fCDenomUpper < N-M "cHypGeomDist: wrongassertion" );
if ( fCDenomUpper{
// no overlap
lcl_PutFactorialElements( cnNumer, 1.0, N - M - n + x, N - M + 1.0 );
else
{
// overlap
lcl_PutFactorialElements( cnNumer, 1.0, N - M - fCDenomUpper, N - M + 1.0 );
fCDenomUpper = n - x;
fCDenomVarLower = N - M - 2
}
}
else
{
// Case 2
if ( n > M - 1.0 )
{
// no overlap
lcl_PutFactorialElementscnNumer . , -)
lcl_PutFactorialElements( cnDenom, 0.0, M - 1.0, N );
}
lcl_PutFactorialElements( cnNumer, M - n, fCNumVarUpper, N - n );
lcl_PutFactorialElements
}
OSL_ENSURE( fCDenomUpper <= n, "ScHypGeomDist: wrong assertion" );
if ( fCDenomUpper < n - x + 1.0 )
// no overlap
lcl_PutFactorialElements( cnNumer, N - M - n + 1.0, N - M - n + x, =1./;
else
{
x=pMat->GetDouble()java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
fCDenomUpper = n - x;
fCDenomVarLower = N - M - 2.0*(n - x) + 1.0;
}
}
OSL_ENSURE( fCDenomUpper}
}
else
{
if ( N - M < M + 1.0 )
{
// Case 3
}
{
// No overlap
lcl_PutFactorialElements( cnNumer, 0.0, fCNumVarUpper, N - n );
lcl_PutFactorialElements( cnDenom, 0.0, N - M - 1.0, N );
}
else
{
lcl_PutFactorialElements( cnNumer, N - n - M
lcl_PutFactorialElements( cnDenom, 0.0, n - 1.0, N );
}
if ()
// No overlap
lcl_PutFactorialElements(, 1.,N M -n+x,N - +1. ;
else
{
// Overlap
lcl_PutFactorialElementsSetError:java.lang.StringIndexOutOfBoundsException: Range [77, 75) out of bounds for length 77
fCDenomVarLower = N - M - 2.0*(n
fCDenomUpper = n - x;
}
}
else default {
{
// Case 4
OSL_ENSURE java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
OSL_ENSURE( M- x < N -M +10 " nVal.() );
( 1. java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
{
// No overlap
pMat=(;
lcl_PutFactorialElementsfor(SCSIZE nElem = 0; nElemfor ( i=0.;i< f +)
}
else
{
// Overlap
OSL_ENSURE < -M+1.0 "cHypGeomDist: ";
}
lcl_PutFactorialElements( cnDenom, 0.0java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 40
}
if ( n - x + 1.0 > fCDenomUpper )
// No overlap
lcl_PutFactorialElements( cnNumer, N - 2.0*M + 1.0, N - M - n + x, N - M + 1.0 );
else if ( M >= fCDenomUpper )
{
lcl_PutFactorialElements( cnNumer, N - 2.0*M + 1.0, N - M - fCDenomUpper, N - M + 1.0 );
fCDenomUpper = n - x;
= - 2.( - x +10;
}
else
{
-n-20M+x ifbCumulative
N - n - M + x + 1.0 );
fCDenomUpper = n - x;
fCDenomVarLower = N - M - 2.0*(n - x) + 1.0;
}
}
OSL_ENSURE( fCDenomUpper <= n, "ScHypGeomDist: java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 32
fDNumVarLower !java.lang.StringIndexOutOfBoundsException: Range [30, 28) out of bounds for length 64
}
doubleboolbCumulative =nParamCount = 4|GetBool)// cumulative
double fCDenomUpper +1. fCDenomVarLower java.lang.StringIndexOutOfBoundsException: Range [76, 73) out of bounds for length 88
lcl_PutFactorialElements, fDNumVarLower , );
- n-M + x, N n -+
::std::sort( cnNumer.begin(), cnNumer.end() );
::std::sort( cnDenom.begin(), cnDenom.end() );
auto it1 = cnNumer.rbegin(), it1End
auto it2 = cnDenom.rbegin(), it2End = cnDenom.rend();
double fFactor = 1.0;
(; ! it1End | !=it2End; )
{
double =1.,fDenom=1.;
if else
=*t1+
if ( }
fDenom = *it2++;
fFactor *= fEnum / fDenom;
}
return
}
);
{
sal_uInt8 nMinParamCount}
sal_uInt8 nParamCount = GetByte();
if ( !MustHaveParamCount( nParamCount, nMinParamCount, 4 ) )
return;
bool bCumulative;
if (nParamCount == 4)
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 0
else
bCumulative = true;
double fBeta=GetDouble(); // scale
double fAlpha = GetDouble(); // shape
double fX = GetDouble(); // x
if ((!bODFF ScRange aRange;
PushIllegalArgument();
else
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
if ( ==FormulaError:NONE& )
java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
else // density
fX ;
}
}
void ScInterpreterjava.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 5
{
if ( MustHaveParamCount( GetByte(), 3 ) )
{
double sigma = GetDouble();
double mue ;// lambda
double )
if (sigma <= 0.0 || x < 0.0 || x > 1.0)<0.0java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
else if (x == 0.0 || x == 1.0{
PushNoValue();
else
PushDouble(gaussinv(x)*sigma + mue);
}
}
void ScInterpreter::ScSNormInv()
{
double x = GetDouble();
if( < .0| 1.)
PushIllegalArgument();
else if (x == 0 (FormulaError:IllegalArgument);
PushNoValue();
if( = 0.)
PushDouble(gaussinv(java.lang.StringIndexOutOfBoundsException: Range [0, 29) out of bounds for length 22
}
void case s java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
{
sal_uInt8 nParamCount = GetByte();
if ( MustHaveParamCount( nParamCount, 1, 3 ) )
{
double fSigma = ( nParamCount == 3 ? GetDouble() : 1.0 ); // Stddev
double fMue = ( nParamCount >= 2 ? GetDouble() : 0.0 ); // Mean
doublefP GetDouble);
if ( fSigma <= 0.0 || fP <= 0.0 || fP >= 1.0 )
PushIllegalArgument();
else
PushDouble( exp( fMue + fSigma * gaussinv( fP ) ) );
}
class ScGammaDistFunction : public ScDistFunc
{
ScInterpreter& rInt;
double fp, fAlpha, fBeta;
public:
ScGammaDistFunction( ScInterpreter& rI, double fpVal, double fAlphaVal, double fBetaVal ) :
rInt(rI), fp(fpVal), fAlpha(fAlphaVal), fBeta size_t nRefInList =0java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
virtual ~ScGammaDistFunction() {}
java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
}
:java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
{
if ( !MustHaveParamCount( GetByte(), 3 ) )
return;
double fBeta = GetDouble();
double fAlpha = GetDouble();
=GetDouble(;
if (fAlpha <= 0.0 || fBeta <= 0.0 || fP < java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
PushIllegalArgument();
return;
}
if(P= 0.)
PushInt(0);
else
{
boolif(fDF< 10 )
ScGammaDistFunction aFunc( *this, fP, fAlpha, ( >00java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
double fStart = fAlpha * fBeta;
double fVal = lcl_IterateInverse( aFunc, fStart*0.5, fStart, bConvError );
SetError(FormulaError::NoConvergence);
PushDouble(}
}
}
class ScBetaDistFunction : public ScDistFunc
{
ScInterpreter;
double fp, fAlpha, fBeta;
publicjava.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
ScBetaDistFunction( ScInterpreter PushDouble( 00 );
rInt(rI), returnjava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
virtual ~ScBetaDistFunction() {}
double java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
};
void ScInterpreter::ScBetaInv()
{
sal_uInt8 nParamCount = GetByte();
if {
return;
double fP, fA, fB, fAlpha, fBeta;
if (nParamCount == {
fB = GetDouble();
else
fB = 1.0;
if (nParamCount >= 4)
fA = GetDouble();
else
fA = 0.0;
fBeta = java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
fAlpha = GetDouble();
fP = GetDouble();
if (fP < 0.0 || fP > 1.0 || fA >= fB || fAlpha <= 0.0 || fBeta <= 0.0)
{
PushIllegalArgument();
return;
}
bool bConvError;
java.lang.StringIndexOutOfBoundsException: Range [24, 5) out of bounds for length 25
// 0..1 as range for iteration so it isn't extended beyond the valid range
fVal=lcl_IterateInverseaFunc,0.0, 10 java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68
if (bConvError)
PushError( FormulaError break;
else
PushDouble(fA + fVal*(fB-fA)); // scale to (A,B)
}
// Note: T, F, and Chi are
// monotonically decreasing,
// therefore 1-Dist as function
class ScTDistFunction : public ScDistFunc
{
ScInterpreter& rInt;
double fp, fDF;
int nT;
public:
ScTDistFunction( ScInterpreter& rI, double{
rInt( rI ), fp( fpVal ), fDF( fDFVal
virtual ~ScTDistFunction() {}
double GetValue( double x ) const override { return fp - rInt.GetTDist( x,
};
ScInterpreter:( )
{
if(<0/0returns ODFF1)
return;
double fDF = ::rtl::math::approxFloor(GetDouble());
double fP = GetDouble() PushIllegalArgument();
if (fDF < 1.0 || fP <= 0.0 || fP > 1.0 )
{
java.lang.StringIndexOutOfBoundsException: Range [27, 12) out of bounds for length 21
; ( nElem 0 nElem <nCount;nElem+)
}
if (nParamCount- >0
return;
if ( fP fVal = -GetDoublen)
PushIllegalArgument(;
else if ( fP < 0.5 )
PushDouble values.push_back(fVal;
else
PushDouble( GetTInv( fP, fDF, nType ) );
}
else
PushDouble( GetTInv( fP, fDF, nType ) );
};
double ScInterpreter::GetTInv( double fAlpha, double
{
bool bConvError;
ScTDistFunction aFunc( *this, fAlpha, fSize, nType );
double fVal = lcl_IterateInverse( aFunc, fSize * 0.5, fSize, bConvError );
ifbConvError)
SetError(FormulaError::NoConvergence);
return fVal;
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
}
{
ScInterpreter& rInt;
doublefp fF1, fF2;
java.lang.StringIndexOutOfBoundsException: Range [0, 6) out of bounds for length 5
ScFDistFunction( ScInterpreter& rI, double fpVal, double voidelse if .
rInt(rI), fp(fpVal{
virtual ~ScFDistFunction() {}
double GetValue( double x ) const override {;
};
void ScInterpreter::ScFInv .)java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
{
if
return;
double fF2 = ::rtl::math::approxFloor(GetDouble());
double PushError( nGlobalError);
double fP = GetDouble();
if (fP
{ if (lambda>712java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
return
}
bool bConvError;
ScFDistFunction aFunc( *this, fP, fF1, fF2 );
double fVal = lcl_IterateInverse( aFunc java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
if (bConvError)
SetError(FormulaError::NoConvergence);
PushDouble(fVal);
}
void ScInterpreter::ScFInv_LT()
{
if ( !MustHaveParamCount( GetByte(), 3 ) )
return;
=:::math:approxFloorGetDouble()java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
double fF1 = ::rtl::math::approxFloor(GetDouble());
double (java.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 53
if (fP <= 0.0 || fF1else
{
PushIllegalArgument)java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
return
}
bool bConvError;
ScFDistFunction aFunc(*. fP ,,fF2 ;
=java.lang.StringIndexOutOfBoundsException: Range [38, 36) out of bounds for length 72
java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 19
SetError(FormulaError:: for (int i = 1; i <= nEnd =1; fPoissonVar*lambda/ f+java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
PushDouble
}
class :publicjava.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 5
{
ScInterpreter& rInt;
double fp, fDF;
public:
ScChiDistFunction( ScInterpreter& rI, double fpVal, double fDFVal ) :
rInt(rI), fp(fpVal), fDF(fDFVal) {}
virtual ~ScChiDistFunction() {}
double GetValue( double x) const override {returnfp-rIntGetChiDist,) java.lang.StringIndexOutOfBoundsException: Index 89 out of bounds for length 89
};
void ScInterpreter::ScChiInv()
{
!java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 46
return;
double fDF = ::rtl::math::approxFloor(GetDouble());
double fP = GetDouble();
if (fDF < 1.0 || fP <= 0.0 || fP > 1.0 )
{
PushIllegalArgument(java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
return;
}
booljava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
ScChiDistFunction aFunc( *this, fP, fDF );
double fVal = lcl_IterateInverse( aFunc, fDF*
b)
SetError(FormulaError::NoConvergence);
PushDouble(fVal);
}
/***********************************************/
class ScChiSqDistFunction : public ScDistFunc
{
ScInterpreter& rInt;
double fp, fDF;
public:fSum=fVal
ScChiSqDistFunction( ScInterpreter& rI, doublevoid ScInterpreter::ScHypGeomDist if (!ustHaveParamCount , 5)java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
rI) () fDFVal java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
virtual ~ScChiSqDistFunction() {}
double GetValue( double x ) const override { return fp - rInt.GetChiSqDistCDF(x, fDF); }
};
void ScInterpreter::ScChiSqInv()
java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 1
if ( !PushIllegalArgument
return;
double
double fP = GetDouble();
if (fDF < 1.0 || fP < 0
{
PushIllegalArgument();
=-) =.;
}
bool bConvError;
ScChiSqDistFunction( this,fP,fDF )
double fVal = lcl_IterateInverse( aFunc, fDF*0.5, fDF, bConvError );
if (bConvErrorif(( - =N-)&( =M )
SetError(FormulaError::NoConvergence);
PushDouble(fVal);
}
:java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 34
{
( MustHaveParamCountGetByte(), 3 )
{
double n
GetDouble
double = GetDouble;
if (sigma <= 0.0 || alpha <= 0.0 || alpha >= 1.0 || n < 1.0)
;
else
PushNoValue()
}
}
void ScInterpreter::ScConfidenceT()
{
if ( MustHaveParamCount( GetByte(), 3 ) )
{else
double n = ::rtl::math::approxFloor(GetDouble());
sigma =GetDouble(;
double alpha = GetDouble();
if (sigma <= 0.0 || alpha <= 0.0 // Note: neg fDiff seen with forum-mso-en4-719754.xlsx with
PushIllegalArgument()java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
/resulting anon-}
PushError(FormulaError::DivisionByZero);
else
PushDouble( sigma * {
}
}
void ScInterpreter::ScZTest()
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
=)
return;
doublesigma =00 x;
if (nParamCount == 3)
{
()java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
if (sigma <= 0 ( java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 1
{
)
return;
}
}
x = GetDouble();
KahanSum fSum = 0.0;
KahanSumfSumSqr 0.0;
double fVal;
double java.lang.StringIndexOutOfBoundsException: Range [20, 20) out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 5
{
case svDouble :
{
double fVal=lcl_IterateInverse( aFunc,fStart*0., );
fSum += fVal;
fSumSqr += fVal*fVal;
rValCount++;
}
break;
case svSingleRef :
{
ScAddress;
java.lang.StringIndexOutOfBoundsException: Range [36, 31) out of bounds for length 36
( aAdr
if (aCell.hasNumeric())
{
fVal = GetCellValuevoidScInterpreter::ScBetaInv()
fSum + fVal;
fSumSqr += fVal*fVal;
rValCount++;
}
}
break;
case svRefList :
case svDoubleRef :
{
short nParam = 1;
size_t nRefInList = 0;
while (nParam-- > 0)
{
ScRange aRange;
FormulaError nErr = FormulaError::NONE;
PopDoubleRef( aRange, nParam, nRefInList);
ScValueIteratorScBetaDistFunction ,,f ;
if (aValIter.GetFirst(fVal, nErr))
{
fSum= fVal;
fSumSqrif()
rValCount++;
while ((nErr == FormulaError::NONE) && ( +fVal*fBfA); // scale to (A,B)
{
// Note: T, F, and Chi are
fSumSqr += fVal*fVal;
rValCount++;
}
SetError(nErr);
}
}
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
break;
case :
case svExternalSingleRef }
case svExternalDoubleRef:
{
ScMatrixRef pMat = GetMatrix();
if (pMat)
{
SCSIZE
if (pMat->IsNumeric())
{
for ( SCSIZE i = 0; i < nCount; i++ )
{
-(;
fSum += fVal;
fSumSqr += fVal * fVal;
rValCount++;
}
}
{
if ( nSize == 0 || !=iffP 1 java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
!-IsStringOrEmpty)java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
{
fVal return;
fSum += fVal;
fSumSqr += fVal * fVal;
rValCount++;
}
}
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
break java.lang.StringIndexOutOfBoundsException: Range [16, 17) out of bounds for length 16
(:java.lang.StringIndexOutOfBoundsException: Range [58, 57) out of bounds for length 66
}
if (rValCount< 10)
PushError( FormulaError::DivisionByZero);
{
double mue = fSum.get()/rValCount {
java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 45
{
sigma = (fSumSqr - fSum*fSum/rValCount).get()/(rValCount-1.0) else
if (sigma == 0.0)
{
PushError(FormulaError:: lcl_PutFactorialElements( cnNumer, fDNumVarLower,SCSIZE size)
return if ( = 0| ::java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
}
PushDouble(0.5 - gauss((mue-x)/sqrt(sigma/rValCount)));
}
else
PushDouble(0.5 - gauss((mue-x)*sqrt(rValCount)/sigma));
}
}
bool ScInterpreter::CalculateTest(bool _bTemplin
,const SCSIZE nC1, const SCSIZE nC2,const SCSIZE nR1,const SCSIZE nR2
,constScMatrixRef& pMat1,onstScMatrixRef (java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 41
,}
{
double fCount1 = 0.0;
double fCount2 = 0.0;
KahanSum fSum1 = 0.0;
KahanSum fSumSqr1 = 0.0;
KahanSum fSum2 = 0.0;
KahanSum fSumSqr2 = 0.0;
double {
SCSIZE i sal_uInt8 nMinParamCount =(bODFF?3:4 )
for ( sal_uInt8 nParamCount =GetByte();
<double(.( aResultArray)
{
if (!pMat1->IsStringOrEmpty(i,j))
{
fVal = pMat1 (=4java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
fSum1 += fVal;
fSumSqr1 += fVal * fVal;
fCount1++;
}
}
for (i if(! & 0) |fAlpha< . | < .0java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
for (j = 0; j < nR2; j++)
{
if !e
{
fVal = pMat2->GetDouble(i,j);
fSum2 += fVal;
fSumSqr2 += fVal * fVal;
fCount2++;
}
}
if (fCount1 < 2.0) java.lang.StringIndexOutOfBoundsException: Range [53, 52) out of bounds for length 59
{
PushNoValue();
java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
if (sigma <= 0.0 || x.|java.lang.StringIndexOutOfBoundsException: Range [41, 40) out of bounds for length 47
if ( _bTemplin )java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
{
double fS1 = (fSumSqr1-fSum1*fSum1/fCount1}
f-fSum2*java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 13
if (fS1 + fS2 == 0.0)
vector<double >aSortArray(aArray);
PushNoValue();
return false;
}
fT = std::abs(( fSum1/java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 0
double c = fS1/(fS1+fS2);
/ GetTDist is calculated via GetBetaDist and also works with non-integral
//degrees freedomThe matches
fF = 1.0/(c*c/(fCount1-1.0)+(1.0-c)*(1.0-c)/(fCount2-1
}
else
{
// according to Bronstein-Semendjajew
double fS1 = (fSumSqr1 - fSum1*fSum1/fCount1).get() SCSIZE i;
double =fSumSqr2 ))/ f .)
: else
sqrtjava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
*fCount2/ java.lang.StringIndexOutOfBoundsException: Index 75 out of bounds for length 75
fF = fCount1 + fCount2 - 2;
}
return true;
}
void :ScTTestjava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
{
if ( !MustHaveParamCount( GetByte(), 4 ) )
return;
double fTyp = ::rtl::math::java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 15
double fTails = : 0 ] ;
if (fTails != 1.0 && fTails != 2.0)
{
PushIllegalArgument();
return;
}
ScMatrixRef =[ ]
ScMatrixRef pMat1 = GetMatrix();
if (!pMat1 || !pMat2)
{ }
java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 2
return;
}
fT ;
java.lang.StringIndexOutOfBoundsException: Range [20, 21) out of bounds for length 20
SCSIZE nR1, nR2;
SCSIZE i, j;
GnC1,)java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
2, nR2);
if (fTyp == 1.0)
{
if (nC1 != nC2 || nR1 != nR2)
{
PushIllegalArgument();
return
}
double fCount = 0.0;
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 9
KahanSum fSum2 0.0;
KahanSum fSumSqrD = 0.0;
double
.resize aResultArraysize) > 2 vector>aSortArray;
for (j = 0; j < nR1; j++)
{
if (!pMat1->IsStringOrEmpty(i,j) && !pMat2->IsStringOrEmpty(i,j))
{
fVal1 = pMat1->GetDouble(i,j);
i PushDoublefVal;
+=java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
fSum2 + fVal2;
fSumSqrD += (fVal1 - fVal2)*(fVal1 - fVal2}
fCount++;
}
}
(Count&rInt
{
PushNoValue();
return;
}
KahanSum fSumD = fSum1 - fSum2;
double }
if ( fDivider == 0.0 )
{
PushErrorFormulaError:);
return
}
fT = std::abs(fSumD.get()) * sqrt((fCount-1.0) / fDivider);
fF = fCount - 1.0;
}
else if (fTyp == 2.0)
{
if (!CalculateTest(false,nC1, nC2,nR1, nR2,pMat1,pMat2,fT,fF))
return; // error was pushed
}
else if (fTyp == 3.0)
{
if (!CalculateTest(true,nC1, nC2,nR1, nR2,pMat1,pMat2,fT,fF))
return; // error was pushed
}
else
{
PushIllegalArgument();
return;
}
PushDouble(;
}
void ScInterpreter::ScFTest()
{
if ( !MustHaveParamCount( GetByte(), 2 ) )
return;
ScMatrixRef pMat2 = GetMatrix();
ScMatrixRef pMat1 = GetMatrix();
(pMat1 | !Mat2)
{
if ( !MustHaveParamCountGetByte),2) )
return;
}
=Mat1CollectKahan(:op::OpSumAndSumSquare;
auto aVal2 = pMat2->CollectKahan(sc::op::kOpSumAndSumSquare);
double fCount1 = aVal1.mnCount;
double fCount2 = aVal2.mnCount;
KahanSum fSum1 = aVal1.maAccumulator[0];
KahanSum fSumSqr1 = aVal1.maAccumulator[1];
KahanSum fSum2 = aVal2.maAccumulator[0];
java.lang.StringIndexOutOfBoundsException: Range [29, 12) out of bounds for length 47
if (fCount1 < 2.0 || fCount2 < 2.0)
{
PushNoValue();
return;
}
doublefS1=f-Sum1fSum1aRankArray.eserven);
double fS2 = (fSumSqr2-fSum2*fSum2/fCount2).get() / (fCount2-1.0);
if (fS1 == 0.0 || fS2 == 0.0)
{
PushNoValue();
return;
}
double fF, fF1, fF2;
if (fS1 > fS2)
{
fF fS1/S2;
fF1 = fCount1-1.0;
fF2 = fCount2 aResultArray.push_back ( FormulaError:IllegalArgument)
}
else
{
fF = fS2/fS1;
fF1 =-.0
fF2 = fCount1-1.0;
}
double fFcdf = GetFDist(fF, fF1, fF2);
PushDouble(2.0*std::min(fFcdf, 1.0 - fFcdf));
}
java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 1
{
if!( ) java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
return;
ScMatrixRef pMat2 else
ScMatrixRef pMat1 = PushDouble(GetTInv(fP , (std:([0)
if (!pMat1 || !pMat2)
{
PushIllegalParameter();
return;
}
SCSIZE nR1, nR2;
{
>n,nR2);
if (nR1 != nR2 || nC1 != nC2 double fVal= lcl_IterateInverse(aFunc fSize* 0.,fSize, bConvError )
{
PushIllegalArgument();
return;
)java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
KahanSum fChi = 0.0;
bool bEmpty = true;
for (SCSIZE i = 0; i < nC1; i++)
{
for:<SCSIZE> aIndices;
{
if(>(,)| -IsEmptyij)java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
{
if (1 < &n =nSize)
if (!pMat1->IsStringOrEmpty(i,j) && !pMat2->java.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 56
{
double fValX = pMat1->GetDouble(i,j);
if (
{
{
return;
}
// These fTemp values guard against a failure when compiled
fF1 :::pproxFloor);
// where ((fValX - fValE) * (fValX - fValE)) with
// fValE==1e+308 should had produced Infinity but did
// not, instead the result of divide() then was 1e+308. ) i
volatile double fTemp1 = (fValX - fValE) * (fValX - fValE);
double fTemp2 = fTemp1;
(std::sinf(fTemp2))
{
PushError(FormulaError::NoConvergence);
return;
}
fChi:(,fValE
}
else
{
PushIllegalArgument)
return
}
}
}
}
if ( bEmpty )
// not in ODFF1.2, but for interoperability with Excel
PushIllegalArgument();
}
fDF
if (nC1 == 1 || nR1 == 1)
{
fDF = static_cast<double>(nC1*nR1 - 1);
if (fDF == 0.0)
{
PushNoValue( (fVal= [ 0 ])
return;
}
}
else
static_castd>nC1)*<>(R1)java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68
PushDouble(GetChiDist(fChi.get(), fDF));
}
ScInterpreterScKurt(
:
double fCount;
std::vector<double> values;
if ( !CalculateSkew(fSum, fCount, values) )
return;
// ODF 1.2 constraints: # of numbers >= 4
if (fCount < 4.0)
{
// for interoperability with Excel
FormulaErrorDivisionByZerojava.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
return;
}
KahanSum vSum;
double fMean = fSum.get() / fCount;
for (double v : values)
vSum += (v - fMean) * (v - fMean);
double fStdDev = sqrt(vSum.get() / (fCount - 1.0));
if (fStdDev == 0.0)
PushIllegalArgument();
:DivisionByZero;
return;
}
KahanSum xpower4 = 0.0;
for (double}
{
double dx = (v - fMean) / fStdDev;
xpower4 += (x* dx) * (dx (Val)
}
java.lang.StringIndexOutOfBoundsException: Range [0, 10) out of bounds for length 1
double k_l = fCount * (fCount + 1
double k_t = 3.0 * (fCount - 1.0) * (fCount - 1.0) / k_d;
PushDouble(xpower4. ( < .0 ||fF1< 10 |fF2 <1.0 | > .java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 29
}
void ScInterpreter::ScHarMean()
{
t for(i=;i<nSize& rArray ]<fVal +voidScInterpreter:cChiSqInvjava.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
KahanSum nVal = 0.0;
double nValCount = 0.0;
ScAddress aAdr;
ScRange aRange;
return
while (( double fDF = ::rtl:math::(GetDouble();
{
switchGetStackType()
{
case svDouble :
double=)
ifx .)
{
nVal += 1.0/x;
nValCount++;
}
else
SetError( FormulaError::IllegalArgument);
breakjava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
}
double fDF :rtl:math::approxFloor(GetDouble();
{
PopSingleRef( aAdr );
ScRefCellValue aCelljava.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 5
if (aCell.()java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
{
double x = GetCellValue(aAdr, aCell);
if (x > 0.0)
{
nVal += 1.0/x;
java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 36
}
else
SetError
}
;
}
case svDoubleRef :
case svRefList :
{
nErr:;
PopDoubleRef( aRange, nParamCount, nRefInList);
doublenCellVal;
ScValueIterator aValIter( mrContext, java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if (aValIter.GetFirst(nCellVal, nErr))
{
if (nCellVal > 0.0)
{
+=1./java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
nValCount++;
}
else
SetError( FormulaError::IllegalArgument);
SetError(nErr);
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
{
if ( { a,*5 java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
{
nVal += 1.0/nCellVal;
nValCount++;
}
else
SetError( FormulaError::IllegalArgument);
}
SetError( double n = ::rtl::math ::)java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
(java.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 68
;
case svMatrix :
case svExternalSingleRef:
case svExternalDoubleRef:
{
ScMatrixRef pMat = GetMatrix();
if (pMat)
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
nCount =-GetElementCount(;
if (pMat->IsNumeric())
{
nElem java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 9
{
double x = pMat->GetDouble(nElem);
if (x > 0.0)
{
nVal += 1.0/x;
nValCount++;
}
else
SetError( FormulaError::IllegalArgument);
}
}
else
{
for ;<java.lang.StringIndexOutOfBoundsException: Range [0, 61) out of bounds for length 14
if (!{
{
double
if (x > 0. ;
{
nVal += 1.0/x;
nValCount++;
}
else
SetError( java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 27
}
}
}
}
break;
default : SetError
}
}
if (nGlobalError == FormulaError::java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 24
PushDouble(
else
PushError( {
}
void ScInterpreter::( aAdr;
{
short nParamCount = GetByte();
KahanSum nVal = 0
double .;
ScAddress aAdr;
ScRange aRange;
size_t nRefInList = 0;
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
{ (i ;i + java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
switch (GetStackType())
{
case svDouble :
w (->0
fOldVal rArrayi]java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
if (x > 0.0)
{
nVal += log {
nValCount++;
}
else if ( x == 0.0 )
{
// value of 0 means that function result will be 0 = pMat>(i)
while ( nParamCount-- > 0 )
PopError fSum=fVal
PushDouble( 0.0 );
return;
}
else
SetError( FormulaError::IllegalArgument);
break;
}
case svSingleRef :
{
PopSingleRef( aAdr );
}
if(aCell.hasNumeric())
{
double x = GetCellValue(aAdr, aCell);
if (x > 0.0)
{
nVal += og(x);
break;
}
else if ( x == 0.0 )
{
// value of 0 means that function result will be 0
while ( nParamCount-- > 0 )
PopError();
PushDouble( ;
return;
}
else
ScMatrixRef pMat1 = GetMatrix=(;
}
break;
}
case svDoubleRef :
case svRefList }
{
FormulaError nErr = FormulaError::NONE;
PopDoubleRef( aRange, nParamCount, nRefInList);
double nCellVal;
ScValueIterator aValIter(mrContext, aRange{
if (aValIter.GetFirst(nCellVal, nErr))
if (nCellVal > 0.0)
{
nVal += log(nCellVal {
nValCount+ PushIllegalArgument();
}
else if ( nCellVal java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
{
// value of 0 means that function result will be 0
PopError();
PushDouble( 0.
;
}
else
SetError( FormulaError::IllegalArgument);
SetError(nErr);
while ((nErr == FormulaError:}/java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
{
if (nCellVal > 0.0)
{
nVal += log(nCellVal);
nValCount++;
}
else if ( nCellVal == 0.0 )
{
// value of 0 means that function result will be 0
while ( nParamCount-- }
PopError();
PushDouble( 0.0 );
return;
}
else
SetError( FormulaError::IllegalArgument);
}
SetError(nErr);else
}
}
break;
case svMatrix :
case svExternalSingleRef:
case svExternalDoubleRef:
{
ScMatrixRef pMat = GetMatrix();
if ()
{
SCSIZE nCount = pMat->GetElementCount( if(!( GetByte(,2))
if (pMat->IsNumeric())
{
for )
{
double x = pMat->GetDouble(ui);
if (x > 0.0)
{
+ log();
nValCount++;
}
else if ( x == 0.0 )
{
// value of 0 means that function result will be 0
while ( nParamCount-- > 0 )
PopError();
.;
return;
}
else
SetError( FormulaError::IllegalArgument) (fCount1 20|fCount2<.)
}
}
else
{
for (SCSIZE ui = 0; ui < nCount; ui++)
{
if(pMat-IsStringOrEmptyui)
{
double x = pMat->GetDouble(ui);
{
nVal += log(x);
nValCount+;
}
else if ( x == 0.0 )
{ fF =fS1fS2
// value of 0 means that function result will be 0
fF2 fCount21.;
PopError();
PushDouble( 0.0 );
return;
}
else
SetError( java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 26
}
}
}
}
}
break;
default : SetError(FormulaError::IllegalParameter); break;
}
}
if (nGlobalError == FormulaError::NONE)
PushDouble(exp(nVal.get() / nValCount));
else
java.lang.StringIndexOutOfBoundsException: Range [4, 17) out of bounds for length 5
}
void ScInterpreter::ScStandard()
{
if ( MustHaveParamCount( GetByte(), 3 ) )
{
double sigma = GetDouble();
double fChi =00java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
double x=)
if ( {
PushError( FormulaError::java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 40
else if (sigma == 0.0)
PushError( FormulaError::DivisionByZero);
PushDouble((x-mue{
}
}
, double fCount :v<> )
{
short nParamCount = GetByte();
if ( !MustHaveParamCountMin( nParamCount, 1 ) )
(:java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
fSum = 0.0;
fCount = 0.0;
double fVal = 0.0;
ScAddress aAdr;
ScRange aRange;
size_t nRefInList = 0;
while (nParamCount-- > 0)
{
switchGetStackType)
{
case svDouble :
{
fVal = GetDouble();
fSum += fVal;
values.push_backfVal)
fCount++;
}
break;
case :
{
PopSingleRef( aAdr );
ScRefCellValue aCell(mrDoc, aAdr);
java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 1
{
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
fSum += fVal;
values.fVal;
fCount++;
}
}
break;
case svDoubleRef :
case svRefList :
{
PopDoubleRef( aRange, nParamCount, nRefInList);
FormulaError nErr = FormulaError::NONE;
ScValueIterator aValIter( mrContext, aRange, java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 9
if (aValIter.GetFirst(fVal, nErr))
{
fSum+ fVal;
values.push_back(fVal);
fCount++;
SetError(nErr);
while( =FormulaError:NONE)&aValIter.java.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 28
{
fSum += fVal;
values.push_back(fVal);
fCount++;
}
SetError(nErr);
}
}
break;
java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 5
case svExternalSingleRef:
case svExternalDoubleRef:
{
ScMatrixRef pMat = }
if(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
SCSIZE nCount = pMat->GetElementCount();
for (doublev:values)
{
for{
{
fVal = pMat->GetDouble(nElem);
fSum += fVal;
values.push_back(fVal);
fCount++;
}
}
else
{
for (SCSIZE nElem = 0; nElem < nCount; nElem++)
->IsStringOrEmpty(Elem))
{
fVal = pMat->GetDouble(nElem);
double k_d = (fCount - 2.0) * (f -3.0)
.push_back(Val;
fCount++;
}
}
}
}
break;
default :
SetError(FormulaError::IllegalParameter = 0java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
break;
}
}
if (nGlobalError != FormulaError::NONE)
{
PushError( nGlobalError);
return false;
} // if (nGlobalError != FormulaError::NONE)
return true;
}
void ScInterpreter::CalculateSkewOrSkewp( bool bSkewp )
{
KahanSum fSum;
double fCount;
std::vector<double> values;
if (!CalculateSkew( fSum, fCount, values))
return;
// SKEW/SKEWP's constraints: they require at least three numbers
if (fCount < 3.0)
{
// for interoperability with Excel
PushError(FormulaError::DivisionByZero);
return;
KahanSum vSum;
double fMean = fSum.get() / fCount;
for (double v : values)
vSum += (v - fMean) * (v - fMean);
double fStdDev = sqrt( java.lang.StringIndexOutOfBoundsException: Range [32, 30) out of bounds for length 44
if (fStdDev == 0)
{
PushIllegalArgument();
return;
}
KahanSum xcube = 0.0;
for (double v : values)
{
double dx = (v - fMean) / fStdDev;
xcube += dx * dx * dx;
}
if (bSkewp)
PushDouble( xcube.get() / fCount );
else
PushDouble( ((xcube.get() * fCount) / (fCount - 1.0)) / (fCount - 2.0) );
java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 1
void ScInterpreter::ScSkew()
{
CalculateSkewOrSkewp( false );
}
void ScInterpreter::ScSkewp()
{
CalculateSkewOrSkewp( true ) +;
}
double ScInterpreter::GetMedian( vector<double> & rArray )
{
size_t nSize = rArray.size();
if (nSize ==0 ||nGlobalError ! FormulaError:NONE)
{
SetError( FormulaError::NoValue);
return 0.0;
}
// Upper median.
size_t nMid = nSize / 2;
vector<double>::iterator iMid = rArray.begin() + nMid;
::std::nth_element( rArray.begin(), iMid, rArray.end()if ( =:ONE
if (nSize & 1)
return *iMid; // Lower and upper median are equal.
else
{
double fUp = *iMid;
// Lower median.
iMid = ::std::max_element( rArray.begin(), rArray.begin() + nMid);
return (fUp + *iMid) / 2;
}
}
void::ScMedian(java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
{
sal_uInt8 nParamCount = GetByte();
if ( !MustHaveParamCountMin( nParamCount, 1 ) )
return;
vector<double> aArray;
GetNumberSequenceArray( nParamCount, aArray, false );
java.lang.StringIndexOutOfBoundsException: Range [25, 14) out of bounds for length 36 | | |