[Libreoffice-commits] core.git: formula/source include/formula sc/inc sc/qa sc/source

Winfried Donkers winfrieddonkers at libreoffice.org
Wed Nov 20 10:25:39 PST 2013


 formula/source/core/resource/core_resource.src |   35 ++++
 include/formula/compiler.hrc                   |    7 
 include/formula/opcode.hxx                     |    5 
 sc/inc/helpids.h                               |    5 
 sc/qa/unit/ucalc.cxx                           |    5 
 sc/source/core/inc/interpre.hxx                |    2 
 sc/source/core/tool/interpr3.cxx               |   48 ++++++
 sc/source/core/tool/interpr4.cxx               |   11 +
 sc/source/filter/excel/xlformula.cxx           |    7 
 sc/source/filter/oox/formulabase.cxx           |    7 
 sc/source/ui/src/scfuncs.src                   |  200 +++++++++++++++++++++++++
 11 files changed, 326 insertions(+), 6 deletions(-)

New commits:
commit 5a1fa549520aad341b1b8cfe59b1e1b6ed3e4164
Author: Winfried Donkers <winfrieddonkers at libreoffice.org>
Date:   Sun Nov 17 10:54:37 2013 +0100

    fdo#71436 add Excel 2010 functions for F-distribution
    
    Added F.DIST.RT, F.INV.RT, F.TEST, which are renamed
    FDIST, FINV and FTEST and handle the right tail F-distribution.
    Added F.DIST and F.INV, which are new functions and handle
    the left tail F-distribution.
    
    Change-Id: Ia7fa26a25f3188249f280733d6111951e2600704
    Reviewed-on: https://gerrit.libreoffice.org/6701
    Reviewed-by: Eike Rathke <erack at redhat.com>
    Tested-by: Eike Rathke <erack at redhat.com>

diff --git a/formula/source/core/resource/core_resource.src b/formula/source/core/resource/core_resource.src
index 536de40..609928b 100644
--- a/formula/source/core/resource/core_resource.src
+++ b/formula/source/core/resource/core_resource.src
@@ -284,6 +284,8 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF
     String SC_OPCODE_LOG_NORM_DIST { Text = "LOGNORMDIST" ; };
     String SC_OPCODE_T_DIST { Text = "LEGACY.TDIST" ; };
     String SC_OPCODE_F_DIST { Text = "LEGACY.FDIST" ; };
+    String SC_OPCODE_F_DIST_LT { Text = "COM.MICROSOFT.F.DIST" ; };
+    String SC_OPCODE_F_DIST_RT { Text = "COM.MICROSOFT.F.DIST.RT" ; };
     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" ; };
@@ -314,6 +316,7 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF
     String SC_OPCODE_CONFIDENCE_N { Text = "COM.MICROSOFT.CONFIDENCE.NORM" ; };
     String SC_OPCODE_CONFIDENCE_T { Text = "COM.MICROSOFT.CONFIDENCE.T" ; };
     String SC_OPCODE_F_TEST { Text = "FTEST" ; };
+    String SC_OPCODE_F_TEST_MS { Text = "COM.MICROSOFT.F.TEST" ; };
     String SC_OPCODE_TRIM_MEAN { Text = "TRIMMEAN" ; };
     String SC_OPCODE_PROB { Text = "PROB" ; };
     String SC_OPCODE_CORREL { Text = "CORREL" ; };
@@ -336,6 +339,8 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF
     String SC_OPCODE_GAMMA_INV { Text = "GAMMAINV" ; };
     String SC_OPCODE_T_INV { Text = "TINV" ; };
     String SC_OPCODE_F_INV { Text = "LEGACY.FINV" ; };
+    String SC_OPCODE_F_INV_LT { Text = "COM.MICROSOFT.F.INV" ; };
+    String SC_OPCODE_F_INV_RT { Text = "COM.MICROSOFT.F.INV.RT" ; };
     String SC_OPCODE_CHI_TEST { Text = "LEGACY.CHITEST" ; };
     String SC_OPCODE_CHI_TEST_MS { Text = "COM.MICROSOFT.CHISQ.TEST" ; };
     String SC_OPCODE_LOG_INV { Text = "LOGINV" ; };
@@ -647,6 +652,8 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML
     String SC_OPCODE_LOG_NORM_DIST { Text = "LOGNORMDIST" ; };
     String SC_OPCODE_T_DIST { Text = "TDIST" ; };
     String SC_OPCODE_F_DIST { Text = "FDIST" ; };
+    String SC_OPCODE_F_DIST_LT { Text = "_xlfn.F.DIST" ; };
+    String SC_OPCODE_F_DIST_RT { Text = "_xlfn.F.DIST.RT" ; };
     String SC_OPCODE_CHI_DIST { Text = "CHIDIST" ; };
     String SC_OPCODE_CHI_DIST_MS { Text = "_xlfn.CHISQ.DIST.RT" ; };
     String SC_OPCODE_WEIBULL { Text = "WEIBULL" ; };
@@ -677,6 +684,7 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML
     String SC_OPCODE_CONFIDENCE_N { Text = "_xlfn.CONFIDENCE.NORM" ; };
     String SC_OPCODE_CONFIDENCE_T { Text = "_xlfn.CONFIDENCE.T" ; };
     String SC_OPCODE_F_TEST { Text = "FTEST" ; };
+    String SC_OPCODE_F_TEST_MS { Text = "_xlfn.F.TEST" ; };
     String SC_OPCODE_TRIM_MEAN { Text = "TRIMMEAN" ; };
     String SC_OPCODE_PROB { Text = "PROB" ; };
     String SC_OPCODE_CORREL { Text = "CORREL" ; };
@@ -699,6 +707,8 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML
     String SC_OPCODE_GAMMA_INV { Text = "GAMMAINV" ; };
     String SC_OPCODE_T_INV { Text = "TINV" ; };
     String SC_OPCODE_F_INV { Text = "FINV" ; };
+    String SC_OPCODE_F_INV_LT { Text = "_xlfn.F.INV" ; };
+    String SC_OPCODE_F_INV_RT { Text = "_xlfn.F.INV.RT" ; };
     String SC_OPCODE_CHI_TEST { Text = "CHITEST" ; };
     String SC_OPCODE_CHI_TEST_MS { Text = "_xlfn.CHISQ.TEST" ; };
     String SC_OPCODE_LOG_INV { Text = "LOGINV" ; };
@@ -1012,6 +1022,8 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH
     String SC_OPCODE_LOG_NORM_DIST { Text = "LOGNORMDIST" ; };
     String SC_OPCODE_T_DIST { Text = "TDIST" ; };
     String SC_OPCODE_F_DIST { Text = "FDIST" ; };
+    String SC_OPCODE_F_DIST_LT { Text = "F.DIST" ; };
+    String SC_OPCODE_F_DIST_RT { Text = "F.DIST.RT" ; };
     String SC_OPCODE_CHI_DIST { Text = "CHIDIST" ; };
     String SC_OPCODE_CHI_DIST_MS { Text = "CHISQ.DIST.RT" ; };
     String SC_OPCODE_WEIBULL { Text = "WEIBULL" ; };
@@ -1042,6 +1054,7 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH
     String SC_OPCODE_CONFIDENCE_N { Text = "CONFIDENCE.NORM" ; };
     String SC_OPCODE_CONFIDENCE_T { Text = "CONFIDENCE.T" ; };
     String SC_OPCODE_F_TEST { Text = "FTEST" ; };
+    String SC_OPCODE_F_TEST_MS { Text = "F.TEST" ; };
     String SC_OPCODE_TRIM_MEAN { Text = "TRIMMEAN" ; };
     String SC_OPCODE_PROB { Text = "PROB" ; };
     String SC_OPCODE_CORREL { Text = "CORREL" ; };
@@ -1064,6 +1077,8 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH
     String SC_OPCODE_GAMMA_INV { Text = "GAMMAINV" ; };
     String SC_OPCODE_T_INV { Text = "TINV" ; };
     String SC_OPCODE_F_INV { Text = "FINV" ; };
+    String SC_OPCODE_F_INV_LT { Text = "F.INV" ; };
+    String SC_OPCODE_F_INV_RT { Text = "F.INV.RT" ; };
     String SC_OPCODE_CHI_TEST { Text = "CHITEST" ; };
     String SC_OPCODE_CHI_TEST_MS { Text = "CHISQ.TEST" ; };
     String SC_OPCODE_LOG_INV { Text = "LOGINV" ; };
@@ -2085,6 +2100,14 @@ Resource RID_STRLIST_FUNCTION_NAMES
     {
         Text [ en-US ] = "FDIST" ;
     };
+    String SC_OPCODE_F_DIST_LT
+    {
+        Text [ en-US ] = "F.DIST" ;
+    };
+    String SC_OPCODE_F_DIST_RT
+    {
+        Text [ en-US ] = "F.DIST.RT" ;
+    };
     String SC_OPCODE_CHI_DIST
     {
         Text [ en-US ] = "CHIDIST" ;
@@ -2205,6 +2228,10 @@ Resource RID_STRLIST_FUNCTION_NAMES
     {
         Text [ en-US ] = "FTEST" ;
     };
+    String SC_OPCODE_F_TEST_MS
+    {
+        Text [ en-US ] = "F.TEST" ;
+    };
     String SC_OPCODE_TRIM_MEAN
     {
         Text [ en-US ] = "TRIMMEAN" ;
@@ -2293,6 +2320,14 @@ Resource RID_STRLIST_FUNCTION_NAMES
     {
         Text [ en-US ] = "FINV" ;
     };
+    String SC_OPCODE_F_INV_LT
+    {
+        Text [ en-US ] = "F.INV" ;
+    };
+    String SC_OPCODE_F_INV_RT
+    {
+        Text [ en-US ] = "F.INV.RT" ;
+    };
     String SC_OPCODE_CHI_TEST
     {
         Text [ en-US ] = "CHITEST" ;
diff --git a/include/formula/compiler.hrc b/include/formula/compiler.hrc
index 1cf1c2d..4f2f4e6 100644
--- a/include/formula/compiler.hrc
+++ b/include/formula/compiler.hrc
@@ -425,8 +425,13 @@
 #define SC_OPCODE_CHISQ_INV_MS      427
 #define SC_OPCODE_CONFIDENCE_N      428
 #define SC_OPCODE_CONFIDENCE_T      429
+#define SC_OPCODE_F_DIST_LT         430
+#define SC_OPCODE_F_DIST_RT         431
+#define SC_OPCODE_F_INV_LT          432
+#define SC_OPCODE_F_INV_RT          433
+#define SC_OPCODE_F_TEST_MS         434
 
-#define SC_OPCODE_STOP_2_PAR        430     /* last function with two or more parameters' OpCode + 1 */
+#define SC_OPCODE_STOP_2_PAR        435     /* 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 75fdb92..b5953f7 100644
--- a/include/formula/opcode.hxx
+++ b/include/formula/opcode.hxx
@@ -326,6 +326,8 @@ enum OpCodeEnum
         ocLogNormDist       = SC_OPCODE_LOG_NORM_DIST,
         ocTDist             = SC_OPCODE_T_DIST,
         ocFDist             = SC_OPCODE_F_DIST,
+        ocFDist_LT          = SC_OPCODE_F_DIST_LT,
+        ocFDist_RT          = SC_OPCODE_F_DIST_RT,
         ocChiDist           = SC_OPCODE_CHI_DIST,
         ocChiDist_MS        = SC_OPCODE_CHI_DIST_MS,
         ocChiSqDist         = SC_OPCODE_CHISQ_DIST,
@@ -359,6 +361,7 @@ enum OpCodeEnum
         ocConfidence_N      = SC_OPCODE_CONFIDENCE_N,
         ocConfidence_T      = SC_OPCODE_CONFIDENCE_T,
         ocFTest             = SC_OPCODE_F_TEST,
+        ocFTest_MS          = SC_OPCODE_F_TEST_MS,
         ocTrimMean          = SC_OPCODE_TRIM_MEAN,
         ocProb              = SC_OPCODE_PROB,
         ocCorrel            = SC_OPCODE_CORREL,
@@ -381,6 +384,8 @@ enum OpCodeEnum
         ocGammaInv          = SC_OPCODE_GAMMA_INV,
         ocTInv              = SC_OPCODE_T_INV,
         ocFInv              = SC_OPCODE_F_INV,
+        ocFInv_LT           = SC_OPCODE_F_INV_LT,
+        ocFInv_RT           = SC_OPCODE_F_INV_RT,
         ocChiTest           = SC_OPCODE_CHI_TEST,
         ocChiTest_MS        = SC_OPCODE_CHI_TEST_MS,
         ocLogInv            = SC_OPCODE_LOG_INV,
diff --git a/sc/inc/helpids.h b/sc/inc/helpids.h
index 148f6de..5547551 100644
--- a/sc/inc/helpids.h
+++ b/sc/inc/helpids.h
@@ -695,5 +695,10 @@
 #define HID_FUNC_CHISQINV_MS                                    "SC_HID_FUNC_CHISQINV_MS"
 #define HID_FUNC_CONFIDENCE_N                                   "SC_HID_FUNC_CONFIDENCE_N"
 #define HID_FUNC_CONFIDENCE_T                                   "SC_HID_FUNC_CONFIDENCE_T"
+#define HID_FUNC_F_DIST_LT                                      "SC_HID_FUNC_F_DIST_LT"
+#define HID_FUNC_F_DIST_RT                                      "SC_HID_FUNC_F_DIST_RT"
+#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"
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index 715681b..b48f4f2 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -2389,6 +2389,11 @@ void Test::testFunctionLists()
         "CRITBINOM",
         "DEVSQ",
         "EXPONDIST",
+        "F.DIST",
+        "F.DIST.RT",
+        "F.INV",
+        "F.INV.RT",
+        "F.TEST",
         "FDIST",
         "FINV",
         "FISHER",
diff --git a/sc/source/core/inc/interpre.hxx b/sc/source/core/inc/interpre.hxx
index 813fb1b..dc8c8b4 100644
--- a/sc/source/core/inc/interpre.hxx
+++ b/sc/source/core/inc/interpre.hxx
@@ -749,6 +749,7 @@ void ScLogNormDist();
 void ScLogNormInv();
 void ScTDist();
 void ScFDist();
+void ScFDist_LT();
 void ScChiDist();   // for LEGACY.CHIDIST, returns right tail
 void ScChiSqDist(); // returns left tail or density
 void ScChiSqInv(); //invers to CHISQDIST
@@ -756,6 +757,7 @@ void ScWeibull();
 void ScBetaDist();
 void ScBetaDist_MS();
 void ScFInv();
+void ScFInv_LT();
 void ScTInv();
 void ScChiInv();
 void ScBetaInv();
diff --git a/sc/source/core/tool/interpr3.cxx b/sc/source/core/tool/interpr3.cxx
index 6272792..2f534f6 100644
--- a/sc/source/core/tool/interpr3.cxx
+++ b/sc/source/core/tool/interpr3.cxx
@@ -1597,6 +1597,33 @@ void ScInterpreter::ScFDist()
     PushDouble(GetFDist(fF, fF1, fF2));
 }
 
+void ScInterpreter::ScFDist_LT()
+{
+    if ( !MustHaveParamCount( GetByte(), 4 ) )
+        return;
+    bool   bCum = GetBool();
+    double fF2 = ::rtl::math::approxFloor( GetDouble() );
+    double fF1 = ::rtl::math::approxFloor( GetDouble() );
+    double fF  = GetDouble();
+    if ( fF < 0.0 || fF1 < 1.0 || fF2 < 1.0 || fF1 >= 1.0E10 || fF2 >= 1.0E10 )
+    {
+        PushIllegalArgument();
+        return;
+    }
+    if ( bCum )
+    {
+        // left tail cumulative distribution
+        PushDouble( 1.0 - GetFDist( fF, fF1, fF2 ) );
+    }
+    else
+    {
+        // probability density function
+        PushDouble( pow( fF1 / fF2, fF1 / 2 ) * pow( fF, ( fF1 / 2 ) - 1 ) /
+                    ( pow( ( 1 + ( fF * fF1 / fF2 ) ), ( fF1 + fF2 ) / 2 ) *
+                      GetBeta( fF1 / 2, fF2 / 2 ) ) );
+    }
+}
+
 void ScInterpreter::ScChiDist()
 {
     double fResult;
@@ -2168,6 +2195,27 @@ void ScInterpreter::ScFInv()
     PushDouble(fVal);
 }
 
+void ScInterpreter::ScFInv_LT()
+{
+    if ( !MustHaveParamCount( GetByte(), 3 ) )
+        return;
+    double fF2 = ::rtl::math::approxFloor(GetDouble());
+    double fF1 = ::rtl::math::approxFloor(GetDouble());
+    double fP  = GetDouble();
+    if (fP <= 0.0 || fF1 < 1.0 || fF2 < 1.0 || fF1 >= 1.0E10 || fF2 >= 1.0E10 || fP > 1.0)
+    {
+        PushIllegalArgument();
+        return;
+    }
+
+    bool bConvError;
+    ScFDistFunction aFunc( *this, ( 1.0 - fP ), fF1, fF2 );
+    double fVal = lcl_IterateInverse( aFunc, fF1*0.5, fF1, bConvError );
+    if (bConvError)
+        SetError(errNoConvergence);
+    PushDouble(fVal);
+}
+
 class ScChiDistFunction : public ScDistFunc
 {
     ScInterpreter&  rInt;
diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx
index f17f847..38d73b0 100644
--- a/sc/source/core/tool/interpr4.cxx
+++ b/sc/source/core/tool/interpr4.cxx
@@ -4110,7 +4110,9 @@ StackVar ScInterpreter::Interpret()
                 case ocHypGeomDist      : ScHypGeomDist();              break;
                 case ocLogNormDist      : ScLogNormDist();              break;
                 case ocTDist            : ScTDist();                    break;
-                case ocFDist            : ScFDist();                    break;
+                case ocFDist            :
+                case ocFDist_RT         : ScFDist();                    break;
+                case ocFDist_LT         : ScFDist_LT();                 break;
                 case ocChiDist          :
                 case ocChiDist_MS       : ScChiDist();                  break;
                 case ocChiSqDist        :
@@ -4133,7 +4135,8 @@ StackVar ScInterpreter::Interpret()
                 case ocBad              : ScBadName();                  break;
                 case ocZTest            : ScZTest();                    break;
                 case ocTTest            : ScTTest();                    break;
-                case ocFTest            : ScFTest();                    break;
+                case ocFTest            :
+                case ocFTest_MS         : ScFTest();                    break;
                 case ocRank             : ScRank();                     break;
                 case ocPercentile       : ScPercentile();               break;
                 case ocPercentrank      : ScPercentrank();              break;
@@ -4173,7 +4176,9 @@ StackVar ScInterpreter::Interpret()
                 case ocChiSqInv         :
                 case ocChiSqInv_MS      : ScChiSqInv();                 break;
                 case ocTInv             : ScTInv();                     break;
-                case ocFInv             : ScFInv();                     break;
+                case ocFInv             :
+                case ocFInv_RT          : ScFInv();                     break;
+                case ocFInv_LT          : ScFInv_LT();                  break;
                 case ocLogInv           : ScLogNormInv();               break;
                 case ocBetaDist         : ScBetaDist();                 break;
                 case ocBetaDist_MS      : ScBetaDist_MS();              break;
diff --git a/sc/source/filter/excel/xlformula.cxx b/sc/source/filter/excel/xlformula.cxx
index 9f01843..b525d75 100644
--- a/sc/source/filter/excel/xlformula.cxx
+++ b/sc/source/filter/excel/xlformula.cxx
@@ -445,7 +445,12 @@ static const XclFunctionInfo saFuncTable_2010[] =
     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(         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" )
 };
 
 /** Functions new in Excel 2013.
diff --git a/sc/source/filter/oox/formulabase.cxx b/sc/source/filter/oox/formulabase.cxx
index 09838b3..b2376f4 100644
--- a/sc/source/filter/oox/formulabase.cxx
+++ b/sc/source/filter/oox/formulabase.cxx
@@ -763,7 +763,12 @@ static const FunctionData saFuncTable2010[] =
     { "COM.MICROSOFT.CHISQ.INV.RT",           "CHISQ.INV.RT",        NOID,    NOID,   2,  2,  V, { VR }, FUNCFLAG_MACROCALL_NEW },
     { "COM.MICROSOFT.CHISQ.TEST",             "CHISQ.TEST",          NOID,    NOID,   2,  2,  V, { VA }, FUNCFLAG_MACROCALL_NEW },
     { "COM.MICROSOFT.CONFIDENCE.NORM",        "CONFIDENCE.NORM",     NOID,    NOID,   3,  3,  V, { VR }, FUNCFLAG_MACROCALL_NEW },
-    { "COM.MICROSOFT.CONFIDENCE.T",           "CONFIDENCE.T",        NOID,    NOID,   3,  3,  V, { VR }, FUNCFLAG_MACROCALL_NEW }
+    { "COM.MICROSOFT.CONFIDENCE.T",           "CONFIDENCE.T",        NOID,    NOID,   3,  3,  V, { VR }, FUNCFLAG_MACROCALL_NEW },
+    { "COM.MICROSOFT.F.DIST",                 "F.DIST",              NOID,   NOID,    4,  4,  V, { VR }, FUNCFLAG_MACROCALL_NEW },
+    { "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 }
 };
 
 /** Functions new in Excel 2013.
diff --git a/sc/source/ui/src/scfuncs.src b/sc/source/ui/src/scfuncs.src
index 67c346e..36dee21 100644
--- a/sc/source/ui/src/scfuncs.src
+++ b/sc/source/ui/src/scfuncs.src
@@ -7145,6 +7145,94 @@ Resource RID_SC_FUNCTION_DESCRIPTIONS2
             Text [ en-US ] = "The degrees of freedom in the denominator of the F distribution." ;
         };
     };
+     // -=*# Resource for function F.DIST #*=-
+    Resource SC_OPCODE_F_DIST_LT
+    {
+        String 1 // Description
+        {
+            Text [ en-US ] = "Values of the left tail F probability distribution." ;
+        };
+        ExtraData =
+        {
+            0;
+            ID_FUNCTION_GRP_STATISTIC;
+            U2S( HID_FUNC_F_DIST_LT );
+            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 F distribution is to be calculated." ;
+        };
+        String 4 // Name of Parameter 2
+        {
+            Text [ en-US ] = "degrees_freedom_1" ;
+        };
+        String 5 // Description of Parameter 2
+        {
+            Text [ en-US ] = "The degrees of freedom in the numerator of the F distribution." ;
+        };
+        String 6 // Name of Parameter 3
+        {
+            Text [ en-US ] = "degrees_freedom_2" ;
+        };
+        String 7 // Description of Parameter 3
+        {
+            Text [ en-US ] = "The degrees of freedom in the denominator of the F distribution." ;
+        };
+        String 8 // Name of Parameter 4
+        {
+            Text [ en-US ] = "cumulative" ;
+        };
+        String 9 // Description of Parameter 4
+        {
+            Text [ en-US ] = "Cumulative distribution function (TRUE) or probability density function (FALSE)." ;
+        };
+    };
+     // -=*# Resource for function F.DIST.RT #*=-
+    Resource SC_OPCODE_F_DIST_RT
+    {
+        String 1 // Description
+        {
+            Text [ en-US ] = "Values of the right tail F probability distribution." ;
+        };
+        ExtraData =
+        {
+            0;
+            ID_FUNCTION_GRP_STATISTIC;
+            U2S( HID_FUNC_F_DIST_RT );
+            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 for which the F distribution is to be calculated." ;
+        };
+        String 4 // Name of Parameter 2
+        {
+            Text [ en-US ] = "degrees_freedom_1" ;
+        };
+        String 5 // Description of Parameter 2
+        {
+            Text [ en-US ] = "The degrees of freedom in the numerator of the F distribution." ;
+        };
+        String 6 // Name of Parameter 3
+        {
+            Text [ en-US ] = "degrees_freedom_2" ;
+        };
+        String 7 // Description of Parameter 3
+        {
+            Text [ en-US ] = "The degrees of freedom in the denominator of the F distribution." ;
+        };
+    };
      // -=*# Resource for function FINV #*=-
     Resource SC_OPCODE_F_INV
     {
@@ -7185,6 +7273,86 @@ Resource RID_SC_FUNCTION_DESCRIPTIONS2
             Text [ en-US ] = "The degrees of freedom in the denominator of the F distribution." ;
         };
     };
+     // -=*# Resource for function F.INV #*=-
+    Resource SC_OPCODE_F_INV_LT
+    {
+        String 1 // Description
+        {
+            Text [ en-US ] = "Values of the inverse left tail F distribution." ;
+        };
+        ExtraData =
+        {
+            0;
+            ID_FUNCTION_GRP_STATISTIC;
+            U2S( HID_FUNC_F_INV_LT );
+            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 probability value for which the inverse F distribution is to be calculated." ;
+        };
+        String 4 // Name of Parameter 2
+        {
+            Text [ en-US ] = "degrees_freedom_1" ;
+        };
+        String 5 // Description of Parameter 2
+        {
+            Text [ en-US ] = "The degrees of freedom in the numerator of the F distribution." ;
+        };
+        String 6 // Name of Parameter 3
+        {
+            Text [ en-US ] = "degrees_freedom_2" ;
+        };
+        String 7 // Description of Parameter 3
+        {
+            Text [ en-US ] = "The degrees of freedom in the denominator of the F distribution." ;
+        };
+    };
+     // -=*# Resource for function F.INV.RT #*=-
+    Resource SC_OPCODE_F_INV_RT
+    {
+        String 1 // Description
+        {
+            Text [ en-US ] = "Values of the inverse right tail F distribution." ;
+        };
+        ExtraData =
+        {
+            0;
+            ID_FUNCTION_GRP_STATISTIC;
+            U2S( HID_FUNC_F_INV_RT );
+            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 probability value for which the inverse F distribution is to be calculated." ;
+        };
+        String 4 // Name of Parameter 2
+        {
+            Text [ en-US ] = "degrees_freedom_1" ;
+        };
+        String 5 // Description of Parameter 2
+        {
+            Text [ en-US ] = "The degrees of freedom in the numerator of the F distribution." ;
+        };
+        String 6 // Name of Parameter 3
+        {
+            Text [ en-US ] = "degrees_freedom_2" ;
+        };
+        String 7 // Description of Parameter 3
+        {
+            Text [ en-US ] = "The degrees of freedom in the denominator of the F distribution." ;
+        };
+    };
      // -=*# Resource for function CHIDIST #*=-
     Resource SC_OPCODE_CHI_DIST
     {
@@ -7826,6 +7994,38 @@ Resource RID_SC_FUNCTION_DESCRIPTIONS2
             Text [ en-US ] = "The second record array." ;
         };
     };
+     // -=*# Resource for function F.TEST #*=-
+    Resource SC_OPCODE_F_TEST_MS
+    {
+        String 1 // Description
+        {
+            Text [ en-US ] = "Calculates the F test." ;
+        };
+        ExtraData =
+        {
+            0;
+            ID_FUNCTION_GRP_STATISTIC;
+            U2S( HID_FUNC_F_TEST_MS );
+            2;  0;  0;
+            0;
+        };
+        String 2 // Name of Parameter 1
+        {
+            Text [ en-US ] = "data_1" ;
+        };
+        String 3 // Description of Parameter 1
+        {
+            Text [ en-US ] = "The first record array." ;
+        };
+        String 4 // Name of Parameter 2
+        {
+            Text [ en-US ] = "data_2" ;
+        };
+        String 5 // Description of Parameter 2
+        {
+            Text [ en-US ] = "The second record array." ;
+        };
+    };
      // -=*# Resource for function TTEST #*=-
     Resource SC_OPCODE_T_TEST
     {


More information about the Libreoffice-commits mailing list