[Libreoffice-commits] core.git: 2 commits - sc/source
Tor Lillqvist
tml at collabora.com
Wed Jan 28 08:48:38 PST 2015
sc/source/core/inc/interpre.hxx | 4 +-
sc/source/ui/optdlg/calcoptionsdlg.cxx | 64 +++++++++++++++++++++++++++++++++
2 files changed, 66 insertions(+), 2 deletions(-)
New commits:
commit eaddf7dfb51df779922f24e31240a8a2a7708fe2
Author: Tor Lillqvist <tml at collabora.com>
Date: Wed Jan 28 18:46:37 2015 +0200
Add NORMDIST test
Change-Id: I9c3d5b94d22566d63f49d9dcd73a97df97e9802e
diff --git a/sc/source/ui/optdlg/calcoptionsdlg.cxx b/sc/source/ui/optdlg/calcoptionsdlg.cxx
index 6483562..a460f54 100644
--- a/sc/source/ui/optdlg/calcoptionsdlg.cxx
+++ b/sc/source/ui/optdlg/calcoptionsdlg.cxx
@@ -506,6 +506,68 @@ struct Round : Area
};
+struct Normdist : Area
+{
+ Normdist() :
+ Area("Normdist")
+ {
+ }
+
+ virtual ~Normdist()
+ {
+ }
+
+ virtual void addHeader(ScDocument *pDoc, int nTab) const SAL_OVERRIDE
+ {
+ pDoc->SetString(ScAddress(0,0,nTab), "num");
+ pDoc->SetString(ScAddress(1,0,nTab), "avg");
+ pDoc->SetString(ScAddress(2,0,nTab), "stdev");
+ pDoc->SetString(ScAddress(3,0,nTab), "type");
+ pDoc->SetString(ScAddress(4,0,nTab), "NORMDIST(num,avg,stdev,type)");
+ pDoc->SetString(ScAddress(5,0,nTab), "expected");
+ }
+
+ virtual void addRow(ScDocument *pDoc, int nRow, int nTab) const SAL_OVERRIDE
+ {
+ const double nNum(comphelper::rng::uniform_real_distribution(0, 100));
+ const double nAvg(comphelper::rng::uniform_real_distribution(0, 100));
+ const double nStDev(comphelper::rng::uniform_real_distribution(1, 10));
+ const int nType(comphelper::rng::uniform_int_distribution(0, 1));
+
+ pDoc->SetValue(ScAddress(0,1+nRow,nTab), nNum);
+ pDoc->SetValue(ScAddress(1,1+nRow,nTab), nAvg);
+ pDoc->SetValue(ScAddress(2,1+nRow,nTab), nStDev);
+ pDoc->SetValue(ScAddress(3,1+nRow,nTab), nType);
+
+ pDoc->SetString(ScAddress(4,1+nRow,nTab),
+ "=NORMDIST(" + ScAddress(0,1+nRow,nTab).Format(SCA_VALID_COL|SCA_VALID_ROW) +
+ "," + ScAddress(1,1+nRow,nTab).Format(SCA_VALID_COL|SCA_VALID_ROW) +
+ "," + ScAddress(2,1+nRow,nTab).Format(SCA_VALID_COL|SCA_VALID_ROW) +
+ "," + ScAddress(3,1+nRow,nTab).Format(SCA_VALID_COL|SCA_VALID_ROW) +
+ ")");
+
+ if (nType == 1)
+ pDoc->SetValue(ScAddress(5,1+nRow,nTab), ScInterpreter::integralPhi((nNum-nAvg)/nStDev));
+ else
+ pDoc->SetValue(ScAddress(5,1+nRow,nTab), ScInterpreter::phi((nNum-nAvg)/nStDev)/nStDev);
+
+ pDoc->SetString(ScAddress(6,1+nRow,nTab),
+ "=IF(ABS(" + ScAddress(4,1+nRow,nTab).Format(SCA_VALID_COL|SCA_VALID_ROW) +
+ "-" + ScAddress(5,1+nRow,nTab).Format(SCA_VALID_COL|SCA_VALID_ROW) +
+ ")<=3e-10"
+ ",0,1)");
+ }
+
+ virtual OUString getSummaryFormula(ScDocument *pDoc, int nTab) const SAL_OVERRIDE
+ {
+ return "=SUM(" +
+ ScRange(ScAddress(6,1,nTab),
+ ScAddress(6,1+mnRows-1,nTab)).Format(SCA_VALID|SCA_TAB_3D|SCA_VALID_COL|SCA_VALID_ROW|SCA_VALID_TAB, pDoc) +
+ ")";
+ }
+
+};
+
struct Reduction : Op
{
int mnNum;
@@ -682,6 +744,8 @@ IMPL_LINK( ScCalcOptionsDialog, TestClickHdl, PushButton*, )
xTestDocument->addTest(Round());
+ xTestDocument->addTest(Normdist());
+
xTestDocument->addTest(Reduction("Sum", "SUM", 100, 0, -1000, 1000, 3e-10,
[] (double nAccum, double nArg)
{
commit 36941076bc245373423dec1a2422269e8492e548
Author: Tor Lillqvist <tml at collabora.com>
Date: Wed Jan 28 18:44:37 2015 +0200
Make phi() and integralPhi() static and public
Needed for the NORMDIST() OpenCL implementation test doc.
Change-Id: I40f0d5d7ccf5963fa47d6648873ab23f8adf7aea
diff --git a/sc/source/core/inc/interpre.hxx b/sc/source/core/inc/interpre.hxx
index ff7fb11..094292a 100644
--- a/sc/source/core/inc/interpre.hxx
+++ b/sc/source/core/inc/interpre.hxx
@@ -737,12 +737,12 @@ void ScForecast();
void ScNoName();
void ScBadName();
// Statistics:
-double phi(double x);
-double integralPhi(double x);
double taylor(const double* pPolynom, sal_uInt16 nMax, double x);
double gauss(double x);
public:
+static SC_DLLPUBLIC double phi(double x);
+static SC_DLLPUBLIC double integralPhi(double x);
static SC_DLLPUBLIC double gaussinv(double x);
private:
More information about the Libreoffice-commits
mailing list