summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWinfried Donkers <winfrieddonkers@libreoffice.org>2013-11-21 11:16:43 +0100
committerEike Rathke <erack@redhat.com>2013-11-22 17:22:45 +0100
commitdec38b9b514e256354297073b2bf556f4a2c3c38 (patch)
tree64859db81fe33c34c88adcfa4f20a6885d5a7464
parent73ee1d61ddbda7271623f5dccd0c647d614d8d1e (diff)
fdo#71722 add Excel 2010 functions
EXPON.DIST, HYPGEOM.DIST, POISSON.DIST, WEIBULL.DIST Change-Id: Ib9f648739ec0af90cdf2f576c7f548a6acb7b4a6 Reviewed-on: https://gerrit.libreoffice.org/6748 Reviewed-by: Eike Rathke <erack@redhat.com> Tested-by: Eike Rathke <erack@redhat.com> (cherry picked from commit e434c1ce0557454ef4cdd98435c5c0b1d5181bcf)
-rw-r--r--formula/source/core/resource/core_resource.src28
-rw-r--r--include/formula/compiler.hrc6
-rw-r--r--include/formula/opcode.hxx4
-rw-r--r--sc/inc/helpids.h4
-rw-r--r--sc/qa/unit/ucalc.cxx4
-rw-r--r--sc/source/core/inc/interpre.hxx2
-rw-r--r--sc/source/core/tool/interpr3.cxx69
-rw-r--r--sc/source/core/tool/interpr4.cxx10
-rw-r--r--sc/source/filter/excel/xlformula.cxx48
-rw-r--r--sc/source/filter/oox/formulabase.cxx6
-rw-r--r--sc/source/ui/src/scfuncs.src184
11 files changed, 328 insertions, 37 deletions
diff --git a/formula/source/core/resource/core_resource.src b/formula/source/core/resource/core_resource.src
index 609928bf5430..afb1d15f31b8 100644
--- a/formula/source/core/resource/core_resource.src
+++ b/formula/source/core/resource/core_resource.src
@@ -195,9 +195,11 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF
String SC_OPCODE_B { Text = "BINOM.DIST.RANGE" ; };
String SC_OPCODE_NORM_DIST { Text = "NORMDIST" ; };
String SC_OPCODE_EXP_DIST { Text = "EXPONDIST" ; };
+ String SC_OPCODE_EXP_DIST_MS { Text = "COM.MICROSOFT.EXPON.DIST" ; };
String SC_OPCODE_BINOM_DIST { Text = "BINOMDIST" ; };
String SC_OPCODE_BINOM_DIST_MS { Text = "COM.MICROSOFT.BINOM.DIST" ; };
String SC_OPCODE_POISSON_DIST { Text = "POISSON" ; };
+ String SC_OPCODE_POISSON_DIST_MS { Text = "COM.MICROSOFT.POISSON.DIST" ; };
String SC_OPCODE_KOMBIN { Text = "COMBIN" ; };
String SC_OPCODE_KOMBIN_2 { Text = "COMBINA" ; };
String SC_OPCODE_VARIATIONEN { Text = "PERMUT" ; };
@@ -281,6 +283,7 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF
String SC_OPCODE_MATRIX_UNIT { Text = "MUNIT" ; };
String SC_OPCODE_BACK_SOLVER { Text = "GOALSEEK" ; };
String SC_OPCODE_HYP_GEOM_DIST { Text = "HYPGEOMDIST" ; };
+ String SC_OPCODE_HYP_GEOM_DIST_MS { Text = "COM.MICROSOFT.HYPGEOM.DIST" ; };
String SC_OPCODE_LOG_NORM_DIST { Text = "LOGNORMDIST" ; };
String SC_OPCODE_T_DIST { Text = "LEGACY.TDIST" ; };
String SC_OPCODE_F_DIST { Text = "LEGACY.FDIST" ; };
@@ -289,6 +292,7 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF
String SC_OPCODE_CHI_DIST { Text = "LEGACY.CHIDIST" ; };
String SC_OPCODE_CHI_DIST_MS { Text = "COM.MICROSOFT.CHISQ.DIST.RT" ; };
String SC_OPCODE_WEIBULL { Text = "WEIBULL" ; };
+ String SC_OPCODE_WEIBULL_MS { Text = "COM.MICROSOFT.WEIBULL.DIST" ; };
String SC_OPCODE_NEG_BINOM_VERT { Text = "NEGBINOMDIST" ; };
String SC_OPCODE_KRIT_BINOM { Text = "CRITBINOM" ; };
String SC_OPCODE_BINOM_INV { Text = "COM.MICROSOFT.BINOM.INV" ; };
@@ -563,9 +567,11 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML
String SC_OPCODE_B { Text = "B" ; };
String SC_OPCODE_NORM_DIST { Text = "NORMDIST" ; };
String SC_OPCODE_EXP_DIST { Text = "EXPONDIST" ; };
+ String SC_OPCODE_EXP_DIST_MS { Text = "_xlfn.EXPON.DIST" ; };
String SC_OPCODE_BINOM_DIST { Text = "BINOMDIST" ; };
String SC_OPCODE_BINOM_DIST_MS { Text = "_xlfn.BINOM.DIST" ; };
String SC_OPCODE_POISSON_DIST { Text = "POISSON" ; };
+ String SC_OPCODE_POISSON_DIST_MS { Text = "_xlfn.POISSON.DIST" ; };
String SC_OPCODE_KOMBIN { Text = "COMBIN" ; };
String SC_OPCODE_KOMBIN_2 { Text = "_xlfn.COMBINA" ; };
String SC_OPCODE_VARIATIONEN { Text = "PERMUT" ; };
@@ -649,6 +655,7 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML
String SC_OPCODE_MATRIX_UNIT { Text = "_xlfn.MUNIT" ; };
String SC_OPCODE_BACK_SOLVER { Text = "GOALSEEK" ; };
String SC_OPCODE_HYP_GEOM_DIST { Text = "HYPGEOMDIST" ; };
+ String SC_OPCODE_HYP_GEOM_DIST_MS { Text = "_xlfn.HYPGEOM.DIST" ; };
String SC_OPCODE_LOG_NORM_DIST { Text = "LOGNORMDIST" ; };
String SC_OPCODE_T_DIST { Text = "TDIST" ; };
String SC_OPCODE_F_DIST { Text = "FDIST" ; };
@@ -657,6 +664,7 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML
String SC_OPCODE_CHI_DIST { Text = "CHIDIST" ; };
String SC_OPCODE_CHI_DIST_MS { Text = "_xlfn.CHISQ.DIST.RT" ; };
String SC_OPCODE_WEIBULL { Text = "WEIBULL" ; };
+ String SC_OPCODE_WEIBULL_MS { Text = "_xlfn.WEIBULL.DIST" ; };
String SC_OPCODE_NEG_BINOM_VERT { Text = "NEGBINOMDIST" ; };
String SC_OPCODE_KRIT_BINOM { Text = "CRITBINOM" ; };
String SC_OPCODE_BINOM_INV { Text = "_xlfn.BINOM.INV" ; };
@@ -933,9 +941,11 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH
String SC_OPCODE_B { Text = "B" ; };
String SC_OPCODE_NORM_DIST { Text = "NORMDIST" ; };
String SC_OPCODE_EXP_DIST { Text = "EXPONDIST" ; };
+ String SC_OPCODE_EXP_DIST_MS { Text = "EXPON.DIST" ; };
String SC_OPCODE_BINOM_DIST { Text = "BINOMDIST" ; };
String SC_OPCODE_BINOM_DIST_MS { Text = "BINOM.DIST" ; };
String SC_OPCODE_POISSON_DIST { Text = "POISSON" ; };
+ String SC_OPCODE_POISSON_DIST_MS { Text = "POISSON.DIST" ; };
String SC_OPCODE_KOMBIN { Text = "COMBIN" ; };
String SC_OPCODE_KOMBIN_2 { Text = "COMBINA" ; };
String SC_OPCODE_VARIATIONEN { Text = "PERMUT" ; };
@@ -1019,6 +1029,7 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH
String SC_OPCODE_MATRIX_UNIT { Text = "MUNIT" ; };
String SC_OPCODE_BACK_SOLVER { Text = "GOALSEEK" ; };
String SC_OPCODE_HYP_GEOM_DIST { Text = "HYPGEOMDIST" ; };
+ String SC_OPCODE_HYP_GEOM_DIST_MS { Text = "HYPGEOM.DIST" ; };
String SC_OPCODE_LOG_NORM_DIST { Text = "LOGNORMDIST" ; };
String SC_OPCODE_T_DIST { Text = "TDIST" ; };
String SC_OPCODE_F_DIST { Text = "FDIST" ; };
@@ -1027,6 +1038,7 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH
String SC_OPCODE_CHI_DIST { Text = "CHIDIST" ; };
String SC_OPCODE_CHI_DIST_MS { Text = "CHISQ.DIST.RT" ; };
String SC_OPCODE_WEIBULL { Text = "WEIBULL" ; };
+ String SC_OPCODE_WEIBULL_MS { Text = "WEIBULL.DIST" ; };
String SC_OPCODE_NEG_BINOM_VERT { Text = "NEGBINOMDIST" ; };
String SC_OPCODE_KRIT_BINOM { Text = "CRITBINOM" ; };
String SC_OPCODE_BINOM_INV { Text = "BINOM.INV" ; };
@@ -1743,6 +1755,10 @@ Resource RID_STRLIST_FUNCTION_NAMES
{
Text [ en-US ] = "EXPONDIST" ;
};
+ String SC_OPCODE_EXP_DIST_MS
+ {
+ Text [ en-US ] = "EXPON.DIST" ;
+ };
String SC_OPCODE_BINOM_DIST
{
Text [ en-US ] = "BINOMDIST" ;
@@ -1755,6 +1771,10 @@ Resource RID_STRLIST_FUNCTION_NAMES
{
Text [ en-US ] = "POISSON" ;
};
+ String SC_OPCODE_POISSON_DIST_MS
+ {
+ Text [ en-US ] = "POISSON.DIST" ;
+ };
String SC_OPCODE_KOMBIN
{
Text [ en-US ] = "COMBIN" ;
@@ -2088,6 +2108,10 @@ Resource RID_STRLIST_FUNCTION_NAMES
{
Text [ en-US ] = "HYPGEOMDIST" ;
};
+ String SC_OPCODE_HYP_GEOM_DIST_MS
+ {
+ Text [ en-US ] = "HYPGEOM.DIST" ;
+ };
String SC_OPCODE_LOG_NORM_DIST
{
Text [ en-US ] = "LOGNORMDIST" ;
@@ -2120,6 +2144,10 @@ Resource RID_STRLIST_FUNCTION_NAMES
{
Text [ en-US ] = "WEIBULL" ;
};
+ String SC_OPCODE_WEIBULL_MS
+ {
+ Text [ en-US ] = "WEIBULL.DIST" ;
+ };
String SC_OPCODE_NEG_BINOM_VERT
{
Text [ en-US ] = "NEGBINOMDIST" ;
diff --git a/include/formula/compiler.hrc b/include/formula/compiler.hrc
index 4f2f4e6d67c8..9bda945bae51 100644
--- a/include/formula/compiler.hrc
+++ b/include/formula/compiler.hrc
@@ -430,8 +430,12 @@
#define SC_OPCODE_F_INV_LT 432
#define SC_OPCODE_F_INV_RT 433
#define SC_OPCODE_F_TEST_MS 434
+#define SC_OPCODE_EXP_DIST_MS 435
+#define SC_OPCODE_HYP_GEOM_DIST_MS 436
+#define SC_OPCODE_POISSON_DIST_MS 437
+#define SC_OPCODE_WEIBULL_MS 438
-#define SC_OPCODE_STOP_2_PAR 435 /* last function with two or more parameters' OpCode + 1 */
+#define SC_OPCODE_STOP_2_PAR 439 /* last function with two or more parameters' OpCode + 1 */
#define SC_OPCODE_STOP_FUNCTION SC_OPCODE_STOP_2_PAR /* last function's OpCode + 1 */
#define SC_OPCODE_LAST_OPCODE_ID (SC_OPCODE_STOP_FUNCTION - 1) /* last OpCode */
diff --git a/include/formula/opcode.hxx b/include/formula/opcode.hxx
index b5953f769765..58f3d4188ba5 100644
--- a/include/formula/opcode.hxx
+++ b/include/formula/opcode.hxx
@@ -229,10 +229,12 @@ enum OpCodeEnum
ocB = SC_OPCODE_B,
ocNormDist = SC_OPCODE_NORM_DIST,
ocExpDist = SC_OPCODE_EXP_DIST,
+ ocExpDist_MS = SC_OPCODE_EXP_DIST_MS,
ocBinomDist = SC_OPCODE_BINOM_DIST,
ocBinomDist_MS = SC_OPCODE_BINOM_DIST_MS,
ocBinomInv = SC_OPCODE_BINOM_INV,
ocPoissonDist = SC_OPCODE_POISSON_DIST,
+ ocPoissonDist_MS = SC_OPCODE_POISSON_DIST_MS,
ocKombin = SC_OPCODE_KOMBIN,
ocKombin2 = SC_OPCODE_KOMBIN_2,
ocVariationen = SC_OPCODE_VARIATIONEN,
@@ -323,6 +325,7 @@ enum OpCodeEnum
ocBackSolver = SC_OPCODE_BACK_SOLVER,
// Statistical functions
ocHypGeomDist = SC_OPCODE_HYP_GEOM_DIST,
+ ocHypGeomDist_MS = SC_OPCODE_HYP_GEOM_DIST_MS,
ocLogNormDist = SC_OPCODE_LOG_NORM_DIST,
ocTDist = SC_OPCODE_T_DIST,
ocFDist = SC_OPCODE_F_DIST,
@@ -335,6 +338,7 @@ enum OpCodeEnum
ocChiSqInv = SC_OPCODE_CHISQ_INV,
ocChiSqInv_MS = SC_OPCODE_CHISQ_INV_MS,
ocWeibull = SC_OPCODE_WEIBULL,
+ ocWeibull_MS = SC_OPCODE_WEIBULL_MS,
ocNegBinomVert = SC_OPCODE_NEG_BINOM_VERT,
ocKritBinom = SC_OPCODE_KRIT_BINOM,
ocKurt = SC_OPCODE_KURT,
diff --git a/sc/inc/helpids.h b/sc/inc/helpids.h
index 554755114258..e1c2dac2e18c 100644
--- a/sc/inc/helpids.h
+++ b/sc/inc/helpids.h
@@ -700,5 +700,9 @@
#define HID_FUNC_F_INV_LT "SC_HID_FUNC_F_INV_LT"
#define HID_FUNC_F_INV_RT "SC_HID_FUNC_F_INV_RT"
#define HID_FUNC_F_TEST_MS "SC_HID_FUNC_F_TEST_MS"
+#define HID_FUNC_EXP_DIST_MS "SC_HID_FUNC_EXP_DIST_MS"
+#define HID_FUNC_HYP_GEOM_DIST_MS "SC_HID_FUNC_HYP_GEOM_DIST_MS"
+#define HID_FUNC_POISSON_DIST_MS "SC_HID_FUNC_POISSON_DIST_MS"
+#define HID_FUNC_WEIBULL_DIST_MS "SC_HID_FUNC_WEIBULL_DIST_MS"
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index b48f4f285539..681283ca9f2a 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -2388,6 +2388,7 @@ void Test::testFunctionLists()
"COVARIANCE.S",
"CRITBINOM",
"DEVSQ",
+ "EXPON.DIST",
"EXPONDIST",
"F.DIST",
"F.DIST.RT",
@@ -2407,6 +2408,7 @@ void Test::testFunctionLists()
"GAUSS",
"GEOMEAN",
"HARMEAN",
+ "HYPGEOM.DIST",
"HYPGEOMDIST",
"INTERCEPT",
"KURT",
@@ -2431,6 +2433,7 @@ void Test::testFunctionLists()
"PERMUTATIONA",
"PHI",
"POISSON",
+ "POISSON.DIST",
"PROB",
"QUARTILE",
"RANK",
@@ -2458,6 +2461,7 @@ void Test::testFunctionLists()
"VARP",
"VARPA",
"WEIBULL",
+ "WEIBULL.DIST",
"ZTEST",
0
};
diff --git a/sc/source/core/inc/interpre.hxx b/sc/source/core/inc/interpre.hxx
index dc8c8b4fc538..e8eefa33bb68 100644
--- a/sc/source/core/inc/interpre.hxx
+++ b/sc/source/core/inc/interpre.hxx
@@ -725,6 +725,7 @@ double GetLogGamma(double x);
double GetBeta(double fAlpha, double fBeta);
double GetLogBeta(double fAlpha, double fBeta);
double GetBinomDistPMF(double x, double n, double p); //probability mass function
+double GetHypGeomDist( double x, double n, double M, double N );
void ScLogGamma();
void ScGamma();
void ScPhi();
@@ -745,6 +746,7 @@ void ScVariationen();
void ScVariationen2();
void ScB();
void ScHypGeomDist();
+void ScHypGeomDist_MS();
void ScLogNormDist();
void ScLogNormInv();
void ScTDist();
diff --git a/sc/source/core/tool/interpr3.cxx b/sc/source/core/tool/interpr3.cxx
index 515530bf4b9e..0cb0cc8b902a 100644
--- a/sc/source/core/tool/interpr3.cxx
+++ b/sc/source/core/tool/interpr3.cxx
@@ -1738,12 +1738,6 @@ static void lcl_PutFactorialElements( ::std::vector< double >& cn, double fLower
/** Calculates a value of the hypergeometric distribution.
- The algorithm is designed to avoid unnecessary multiplications and division
- by expanding all factorial elements (9 of them). It is done by excluding
- those ranges that overlap in the numerator and the denominator. This allows
- for a fast calculation for large values which would otherwise cause an overflow
- in the intermediate values.
-
@author Kohei Yoshida <kohei@openoffice.org>
@see #i47296#
@@ -1751,8 +1745,6 @@ static void lcl_PutFactorialElements( ::std::vector< double >& cn, double fLower
*/
void ScInterpreter::ScHypGeomDist()
{
- const size_t nMaxArraySize = 500000; // arbitrary max array size
-
if ( !MustHaveParamCount( GetByte(), 4 ) )
return;
@@ -1767,6 +1759,63 @@ void ScInterpreter::ScHypGeomDist()
return;
}
+ PushDouble( GetHypGeomDist( x, n, M, N ) );
+}
+
+/** Calculates a value of the hypergeometric distribution (Excel 2010 function).
+
+ This function has an extra argument bCumulative as compared to ScHypGeomDist(),
+ which only calculates the non-cumulative distribution.
+
+ @see fdo#71722
+*/
+void ScInterpreter::ScHypGeomDist_MS()
+{
+ if ( !MustHaveParamCount( GetByte(), 5 ) )
+ return;
+
+ bool bCumulative = GetBool();
+ double N = ::rtl::math::approxFloor(GetDouble());
+ double M = ::rtl::math::approxFloor(GetDouble());
+ double n = ::rtl::math::approxFloor(GetDouble());
+ double x = ::rtl::math::approxFloor(GetDouble());
+
+ if( (x < 0.0) || (n < x) || (M < x) || (N < n) || (N < M) || (x < n - N + M) )
+ {
+ PushIllegalArgument();
+ return;
+ }
+
+ if ( bCumulative )
+ {
+ double fVal = 0.0;
+
+ for ( int i = 0; i <= x && !nGlobalError; i++ )
+ fVal += GetHypGeomDist( i, n, M, N );
+
+ PushDouble( fVal );
+ }
+ else
+ PushDouble( GetHypGeomDist( x, n, M, N ) );
+}
+
+/** Calculates a value of the hypergeometric distribution.
+
+ The algorithm is designed to avoid unnecessary multiplications and division
+ by expanding all factorial elements (9 of them). It is done by excluding
+ those ranges that overlap in the numerator and the denominator. This allows
+ for a fast calculation for large values which would otherwise cause an overflow
+ in the intermediate values.
+
+ @author Kohei Yoshida <kohei@openoffice.org>
+
+ @see #i47296#
+
+ */
+double ScInterpreter::GetHypGeomDist( double x, double n, double M, double N )
+{
+ const size_t nMaxArraySize = 500000; // arbitrary max array size
+
typedef ::std::vector< double > HypContainer;
HypContainer cnNumer, cnDenom;
@@ -1775,7 +1824,7 @@ void ScInterpreter::ScHypGeomDist()
if ( nEstContainerSize > nMaxSize )
{
PushNoValue();
- return;
+ return 0;
}
cnNumer.reserve( nEstContainerSize + 10 );
cnDenom.reserve( nEstContainerSize + 10 );
@@ -1959,7 +2008,7 @@ void ScInterpreter::ScHypGeomDist()
fFactor *= fEnum / fDenom;
}
- PushDouble(fFactor);
+ return fFactor;
}
void ScInterpreter::ScGammaDist()
diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx
index 38d73b096c29..d230ac896872 100644
--- a/sc/source/core/tool/interpr4.cxx
+++ b/sc/source/core/tool/interpr4.cxx
@@ -4099,15 +4099,18 @@ StackVar ScInterpreter::Interpret()
case ocMatRef : ScMatRef(); break;
case ocB : ScB(); break;
case ocNormDist : ScNormDist(); break;
- case ocExpDist : ScExpDist(); break;
+ case ocExpDist :
+ case ocExpDist_MS : ScExpDist(); break;
case ocBinomDist :
case ocBinomDist_MS : ScBinomDist(); break;
- case ocPoissonDist : ScPoissonDist(); break;
+ case ocPoissonDist :
+ case ocPoissonDist_MS : ScPoissonDist(); break;
case ocKombin : ScKombin(); break;
case ocKombin2 : ScKombin2(); break;
case ocVariationen : ScVariationen(); break;
case ocVariationen2 : ScVariationen2(); break;
case ocHypGeomDist : ScHypGeomDist(); break;
+ case ocHypGeomDist_MS : ScHypGeomDist_MS(); break;
case ocLogNormDist : ScLogNormDist(); break;
case ocTDist : ScTDist(); break;
case ocFDist :
@@ -4127,7 +4130,8 @@ StackVar ScInterpreter::Interpret()
case ocMedian : ScMedian(); break;
case ocGeoMean : ScGeoMean(); break;
case ocHarMean : ScHarMean(); break;
- case ocWeibull : ScWeibull(); break;
+ case ocWeibull :
+ case ocWeibull_MS : ScWeibull(); break;
case ocBinomInv :
case ocKritBinom : ScCritBinom(); break;
case ocNegBinomVert : ScNegBinomDist(); break;
diff --git a/sc/source/filter/excel/xlformula.cxx b/sc/source/filter/excel/xlformula.cxx
index b525d75b14e5..67d21ee0f313 100644
--- a/sc/source/filter/excel/xlformula.cxx
+++ b/sc/source/filter/excel/xlformula.cxx
@@ -429,28 +429,32 @@ static const XclFunctionInfo saFuncTable_Oox[] =
*/
static const XclFunctionInfo saFuncTable_2010[] =
{
- EXC_FUNCENTRY_V_VA( ocCovarianceP, 2, 2, 0, "COVARIANCE.P" ),
- EXC_FUNCENTRY_V_VA( ocCovarianceS, 2, 2, 0, "COVARIANCE.S" ),
- EXC_FUNCENTRY_V_RX( ocStDevP_MS, 1, MX, 0, "STDEV.P" ),
- EXC_FUNCENTRY_V_RX( ocStDevS, 1, MX, 0, "STDEV.S" ),
- EXC_FUNCENTRY_V_RX( ocVarP_MS, 1, MX, 0, "VAR.P" ),
- EXC_FUNCENTRY_V_RX( ocVarS, 1, MX, 0, "VAR.S" ),
- EXC_FUNCENTRY_V_VR( ocBetaDist_MS, 4, 6, 0, "BETA.DIST" ),
- EXC_FUNCENTRY_V_VR( ocBetaInv_MS, 3, 5, 0, "BETA.INV" ),
- EXC_FUNCENTRY_V_VR( ocBinomDist_MS, 4, 4, 0, "BINOM.DIST" ),
- EXC_FUNCENTRY_V_VR( ocBinomInv, 3, 3, 0, "BINOM.INV" ),
- EXC_FUNCENTRY_V_VR( ocChiSqDist_MS, 3, 3, 0, "CHISQ.DIST" ),
- EXC_FUNCENTRY_V_VR( ocChiSqInv_MS, 2, 2, 0, "CHISQ.INV" ),
- EXC_FUNCENTRY_V_VR( ocChiDist_MS, 2, 2, 0, "CHISQ.DIST.RT" ),
- EXC_FUNCENTRY_V_VR( ocChiInv_MS, 2, 2, 0, "CHISQ.INV.RT" ),
- EXC_FUNCENTRY_V_VR( ocChiTest_MS, 2, 2, 0, "CHISQ.TEST" ),
- EXC_FUNCENTRY_V_VR( ocConfidence_N, 3, 3, 0, "CONFIDENCE.NORM" ),
- EXC_FUNCENTRY_V_VR( ocConfidence_T, 3, 3, 0, "CONFIDENCE.T" ),
- EXC_FUNCENTRY_V_VR( ocFDist_LT, 4, 4, 0, "F.DIST" ),
- EXC_FUNCENTRY_V_VR( ocFDist_RT, 3, 3, 0, "F.DIST.RT" ),
- EXC_FUNCENTRY_V_VR( ocFInv_LT, 3, 3, 0, "F.INV" ),
- EXC_FUNCENTRY_V_VR( ocFInv_RT, 3, 3, 0, "F.INV.RT" ),
- EXC_FUNCENTRY_V_VR( ocFTest_MS, 2, 2, 0, "F.TEST" )
+ EXC_FUNCENTRY_V_VA( ocCovarianceP, 2, 2, 0, "COVARIANCE.P" ),
+ EXC_FUNCENTRY_V_VA( ocCovarianceS, 2, 2, 0, "COVARIANCE.S" ),
+ EXC_FUNCENTRY_V_RX( ocStDevP_MS, 1, MX, 0, "STDEV.P" ),
+ EXC_FUNCENTRY_V_RX( ocStDevS, 1, MX, 0, "STDEV.S" ),
+ EXC_FUNCENTRY_V_RX( ocVarP_MS, 1, MX, 0, "VAR.P" ),
+ EXC_FUNCENTRY_V_RX( ocVarS, 1, MX, 0, "VAR.S" ),
+ EXC_FUNCENTRY_V_VR( ocBetaDist_MS, 4, 6, 0, "BETA.DIST" ),
+ EXC_FUNCENTRY_V_VR( ocBetaInv_MS, 3, 5, 0, "BETA.INV" ),
+ EXC_FUNCENTRY_V_VR( ocBinomDist_MS, 4, 4, 0, "BINOM.DIST" ),
+ EXC_FUNCENTRY_V_VR( ocBinomInv, 3, 3, 0, "BINOM.INV" ),
+ EXC_FUNCENTRY_V_VR( ocChiSqDist_MS, 3, 3, 0, "CHISQ.DIST" ),
+ EXC_FUNCENTRY_V_VR( ocChiSqInv_MS, 2, 2, 0, "CHISQ.INV" ),
+ EXC_FUNCENTRY_V_VR( ocChiDist_MS, 2, 2, 0, "CHISQ.DIST.RT" ),
+ EXC_FUNCENTRY_V_VR( ocChiInv_MS, 2, 2, 0, "CHISQ.INV.RT" ),
+ EXC_FUNCENTRY_V_VR( ocChiTest_MS, 2, 2, 0, "CHISQ.TEST" ),
+ EXC_FUNCENTRY_V_VR( ocConfidence_N, 3, 3, 0, "CONFIDENCE.NORM" ),
+ EXC_FUNCENTRY_V_VR( ocConfidence_T, 3, 3, 0, "CONFIDENCE.T" ),
+ EXC_FUNCENTRY_V_VR( ocFDist_LT, 4, 4, 0, "F.DIST" ),
+ EXC_FUNCENTRY_V_VR( ocFDist_RT, 3, 3, 0, "F.DIST.RT" ),
+ EXC_FUNCENTRY_V_VR( ocFInv_LT, 3, 3, 0, "F.INV" ),
+ EXC_FUNCENTRY_V_VR( ocFInv_RT, 3, 3, 0, "F.INV.RT" ),
+ EXC_FUNCENTRY_V_VR( ocFTest_MS, 2, 2, 0, "F.TEST" ),
+ EXC_FUNCENTRY_V_VR( ocExpDist_MS, 3, 3, 0, "EXPON.DIST" ),
+ EXC_FUNCENTRY_V_VR( ocHypGeomDist_MS, 5, 5, 0, "HYPGEOM.DIST" ),
+ EXC_FUNCENTRY_V_VR( ocPoissonDist_MS, 3, 3, 0, "POISSON.DIST" ),
+ EXC_FUNCENTRY_V_VR( ocWeibull_MS, 4, 4, 0, "WEIBULL.DIST" )
};
/** Functions new in Excel 2013.
diff --git a/sc/source/filter/oox/formulabase.cxx b/sc/source/filter/oox/formulabase.cxx
index b2376f431960..ef8c92622562 100644
--- a/sc/source/filter/oox/formulabase.cxx
+++ b/sc/source/filter/oox/formulabase.cxx
@@ -768,7 +768,11 @@ static const FunctionData saFuncTable2010[] =
{ "COM.MICROSOFT.F.DIST.RT", "F.DIST.RT", NOID, NOID, 3, 3, V, { VR }, FUNCFLAG_MACROCALL_NEW },
{ "COM.MICROSOFT.F.INV", "F.INV", NOID, NOID, 3, 3, V, { VR }, FUNCFLAG_MACROCALL_NEW },
{ "COM.MICROSOFT.F.INV.RT", "F.INV.RT", NOID, NOID, 3, 3, V, { VR }, FUNCFLAG_MACROCALL_NEW },
- { "COM.MICROSOFT.F.TEST", "F.TEST", NOID, NOID, 2, 2, V, { VA }, FUNCFLAG_MACROCALL_NEW }
+ { "COM.MICROSOFT.F.TEST", "F.TEST", NOID, NOID, 2, 2, V, { VA }, FUNCFLAG_MACROCALL_NEW },
+ { "COM.MICROSOFT.EXPON.DIST", "EXPON.DIST", NOID, NOID, 3, 3, V, { VR }, FUNCFLAG_MACROCALL_NEW },
+ { "COM.MICROSOFT.HYPGEOM.DIST", "HYPGEOM.DIST", NOID, NOID, 5, 5, V, { VR }, FUNCFLAG_MACROCALL_NEW },
+ { "COM.MICROSOFT.POISSON.DIST", "POISSON.DIST", NOID, NOID, 3, 3, V, { VR }, FUNCFLAG_MACROCALL_NEW },
+ { "COM.MICROSOFT.WEIBULL.DIST", "WEIBULL.DIST", NOID, NOID, 4, 4, V, { VR }, FUNCFLAG_MACROCALL_NEW }
};
/** Functions new in Excel 2013.
diff --git a/sc/source/ui/src/scfuncs.src b/sc/source/ui/src/scfuncs.src
index 36dee21c2ec3..ba670a40e15a 100644
--- a/sc/source/ui/src/scfuncs.src
+++ b/sc/source/ui/src/scfuncs.src
@@ -6295,6 +6295,46 @@ Resource RID_SC_FUNCTION_DESCRIPTIONS2
Text [ en-US ] = "0 or FALSE calculates the probability density function. Any other value or TRUE or omitted calculates the cumulative distribution function." ;
};
};
+ // -=*# Resource for function POISSON.DIST #*=-
+ Resource SC_OPCODE_POISSON_DIST_MS
+ {
+ String 1 // Description
+ {
+ Text [ en-US ] = "Returns the Poisson distribution." ;
+ };
+ ExtraData =
+ {
+ 0;
+ ID_FUNCTION_GRP_STATISTIC;
+ U2S( HID_FUNC_POISSON_DIST_MS );
+ 3; 0; 0; 1;
+ 0;
+ };
+ String 2 // Name of Parameter 1
+ {
+ Text [ en-US ] = "Number" ;
+ };
+ String 3 // Description of Parameter 1
+ {
+ Text [ en-US ] = "The value for which the Poisson distribution is to be calculated." ;
+ };
+ String 4 // Name of Parameter 2
+ {
+ Text [ en-US ] = "mean" ;
+ };
+ String 5 // Description of Parameter 2
+ {
+ Text [ en-US ] = "Mean. The mean value of the Poisson distribution." ;
+ };
+ String 6 // Name of Parameter 3
+ {
+ Text [ en-US ] = "Cumulative" ;
+ };
+ String 7 // Description of Parameter 3
+ {
+ Text [ en-US ] = "0 or FALSE calculates the probability density function. Any other value or TRUE or omitted calculates the cumulative distribution function." ;
+ };
+ };
// -=*# Resource for function NORMVERT #*=-
Resource SC_OPCODE_NORM_DIST
{
@@ -6559,6 +6599,46 @@ Resource RID_SC_FUNCTION_DESCRIPTIONS2
Text [ en-US ] = "Cumulated. C=0 calculates the density function, C=1 the distribution." ;
};
};
+ // -=*# Resource for function EXPON.DIST #*=-
+ Resource SC_OPCODE_EXP_DIST_MS
+ {
+ String 1 // Description
+ {
+ Text [ en-US ] = "Values of the exponential distribution." ;
+ };
+ ExtraData =
+ {
+ 0;
+ ID_FUNCTION_GRP_STATISTIC;
+ U2S( HID_FUNC_EXP_DIST_MS );
+ 3; 0; 0; 0;
+ 0;
+ };
+ String 2 // Name of Parameter 1
+ {
+ Text [ en-US ] = "Number" ;
+ };
+ String 3 // Description of Parameter 1
+ {
+ Text [ en-US ] = "The value to which the exponential distribution is to be calculated." ;
+ };
+ String 4 // Name of Parameter 2
+ {
+ Text [ en-US ] = "lambda" ;
+ };
+ String 5 // Description of Parameter 2
+ {
+ Text [ en-US ] = "The parameters of the exponential distribution." ;
+ };
+ String 6 // Name of Parameter 3
+ {
+ Text [ en-US ] = "C" ;
+ };
+ String 7 // Description of Parameter 3
+ {
+ Text [ en-US ] = "Cumulated. C=0 calculates the density function, C=1 the distribution." ;
+ };
+ };
// -=*# Resource for function GAMMAVERT #*=-
Resource SC_OPCODE_GAMMA_DIST
{
@@ -6985,6 +7065,54 @@ Resource RID_SC_FUNCTION_DESCRIPTIONS2
Text [ en-US ] = "Cumulated. C=0 calculates the density function, C=1 the distribution." ;
};
};
+ // -=*# Resource for function WEIBULL.DIST #*=-
+ Resource SC_OPCODE_WEIBULL_MS
+ {
+ String 1 // Description
+ {
+ Text [ en-US ] = "Returns the values of the Weibull distribution." ;
+ };
+ ExtraData =
+ {
+ 0;
+ ID_FUNCTION_GRP_STATISTIC;
+ U2S( HID_FUNC_WEIBULL_DIST_MS );
+ 4; 0; 0; 0; 0;
+ 0;
+ };
+ String 2 // Name of Parameter 1
+ {
+ Text [ en-US ] = "Number" ;
+ };
+ String 3 // Description of Parameter 1
+ {
+ Text [ en-US ] = "The value for which the Weibull distribution is to be calculated." ;
+ };
+ String 4 // Name of Parameter 2
+ {
+ Text [ en-US ] = "Alpha" ;
+ };
+ String 5 // Description of Parameter 2
+ {
+ Text [ en-US ] = "The Alpha parameter of the Weibull distribution." ;
+ };
+ String 6 // Name of Parameter 3
+ {
+ Text [ en-US ] = "beta" ;
+ };
+ String 7 // Description of Parameter 3
+ {
+ Text [ en-US ] = "The Beta parameter of the Weibull distribution." ;
+ };
+ String 8 // Name of Parameter 4
+ {
+ Text [ en-US ] = "C" ;
+ };
+ String 9 // Description of Parameter 4
+ {
+ Text [ en-US ] = "Cumulated. C=0 calculates the density function, C=1 the distribution." ;
+ };
+ };
// -=*# Resource for function HYPGEOMVERT #*=-
Resource SC_OPCODE_HYP_GEOM_DIST
{
@@ -7033,6 +7161,62 @@ Resource RID_SC_FUNCTION_DESCRIPTIONS2
Text [ en-US ] = "The population size." ;
};
};
+ // -=*# Resource for function HYPGEOM.DIST #*=-
+ Resource SC_OPCODE_HYP_GEOM_DIST_MS
+ {
+ String 1 // Description
+ {
+ Text [ en-US ] = "Values of the hypergeometric distribution." ;
+ };
+ ExtraData =
+ {
+ 0;
+ ID_FUNCTION_GRP_STATISTIC;
+ U2S( HID_FUNC_HYP_GEOM_DIST_MS );
+ 5; 0; 0; 0; 0;
+ 0;
+ };
+ String 2 // Name of Parameter 1
+ {
+ Text [ en-US ] = "X" ;
+ };
+ String 3 // Description of Parameter 1
+ {
+ Text [ en-US ] = "The number of successes in the sample." ;
+ };
+ String 4 // Name of Parameter 2
+ {
+ Text [ en-US ] = "n_sample" ;
+ };
+ String 5 // Description of Parameter 2
+ {
+ Text [ en-US ] = "The size of the sample." ;
+ };
+ String 6 // Name of Parameter 3
+ {
+ Text [ en-US ] = "successes" ;
+ };
+ String 7 // Description of Parameter 3
+ {
+ Text [ en-US ] = "The number of successes in the population." ;
+ };
+ String 8 // Name of Parameter 4
+ {
+ Text [ en-US ] = "n_population" ;
+ };
+ String 9 // Description of Parameter 4
+ {
+ Text [ en-US ] = "The population size." ;
+ };
+ String 10 // Name of Parameter 5
+ {
+ Text [ en-US ] = "C" ;
+ };
+ String 11 // Description of Parameter 5
+ {
+ Text [ en-US ] = "Cumulated. TRUE calculates the probabilty mass function, FALSE the cumulative distribution function." ;
+ };
+ };
// -=*# Resource for function TVERT #*=-
Resource SC_OPCODE_T_DIST
{