summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@collabora.com>2014-04-24 12:26:01 -0400
committerAndras Timar <andras.timar@collabora.com>2014-04-30 14:56:54 +0200
commit87c1b0d663679992abf029154650a491e4483f9f (patch)
tree0f4c6f6420166536d2c81903a21006c043fd6238 /sc
parent6d7e1403d7e5581659cd84e3cb8f6bb05b0422c0 (diff)
fdo#76663: Let's not skip the first element of a matrix in PRODUCT.
Change-Id: I00683ce64fea58a80cd7137384e8f30464c44e9f (cherry picked from commit 4158d8843d50d50e9830c8dc24af8722de77f4af) Reviewed-on: https://gerrit.libreoffice.org/9153 Reviewed-by: Eike Rathke <erack@redhat.com> Tested-by: Eike Rathke <erack@redhat.com>
Diffstat (limited to 'sc')
-rw-r--r--sc/source/core/tool/interpr6.cxx1
-rw-r--r--sc/source/core/tool/scmatrix.cxx14
2 files changed, 11 insertions, 4 deletions
diff --git a/sc/source/core/tool/interpr6.cxx b/sc/source/core/tool/interpr6.cxx
index b98fb9bed306..d6b46a763a93 100644
--- a/sc/source/core/tool/interpr6.cxx
+++ b/sc/source/core/tool/interpr6.cxx
@@ -387,6 +387,7 @@ void IterateMatrix(
case ifPRODUCT:
{
ScMatrix::IterateResult aRes = pMat->Product(bTextAsZero);
+ fRes = aRes.mfFirst;
fRes *= aRes.mfRest;
rCount += aRes.mnCount;
}
diff --git a/sc/source/core/tool/scmatrix.cxx b/sc/source/core/tool/scmatrix.cxx
index 45c8e4868094..215bb763720c 100644
--- a/sc/source/core/tool/scmatrix.cxx
+++ b/sc/source/core/tool/scmatrix.cxx
@@ -951,7 +951,7 @@ namespace {
struct SumOp
{
- static const int InitVal = 0;
+ static const double InitVal;
void operator() (double& rAccum, double fVal)
{
@@ -959,9 +959,11 @@ struct SumOp
}
};
+const double SumOp::InitVal = 0.0;
+
struct SumSquareOp
{
- static const int InitVal = 0;
+ static const double InitVal;
void operator() (double& rAccum, double fVal)
{
@@ -969,9 +971,11 @@ struct SumSquareOp
}
};
+const double SumSquareOp::InitVal = 0.0;
+
struct ProductOp
{
- static const int InitVal = 1;
+ static const double InitVal;
void operator() (double& rAccum, double fVal)
{
@@ -979,6 +983,8 @@ struct ProductOp
}
};
+const double ProductOp::InitVal = 1.0;
+
template<typename _Op>
class WalkElementBlocks : std::unary_function<MatrixImplType::element_block_node_type, void>
{
@@ -988,7 +994,7 @@ class WalkElementBlocks : std::unary_function<MatrixImplType::element_block_node
bool mbFirst:1;
bool mbTextAsZero:1;
public:
- WalkElementBlocks(bool bTextAsZero) : maRes(0.0, _Op::InitVal, 0), mbFirst(true), mbTextAsZero(bTextAsZero) {}
+ WalkElementBlocks(bool bTextAsZero) : maRes(_Op::InitVal, _Op::InitVal, 0), mbFirst(true), mbTextAsZero(bTextAsZero) {}
const ScMatrix::IterateResult& getResult() const { return maRes; }