summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryangzhang <yangzhang@multicorewareinc.com>2013-12-17 14:19:48 +0800
committerI-Jui (Ray) Sung <ray@multicorewareinc.com>2013-12-19 17:54:05 -0600
commit774b8342ac15cdb06e9069cfac19c982ec6ca79e (patch)
treedc4e98521317507be6d2af1429b6446f62ffbb6d
parent1f0b4ad3341af3c6f3c309a303bd3008debcb9b3 (diff)
GPU Calc: Fixed accuracy bug of CEILING
AMLOEXT-375 FIX Change-Id: Ie41c66570db2c9b752d987de421bb7310b244611 Signed-off-by: haochen <haochen@multicorewareinc.com> Signed-off-by: Wei Wei <weiwei@multicorewareinc.com> Signed-off-by: I-Jui (Ray) Sung <ray@multicorewareinc.com>
-rw-r--r--sc/source/core/opencl/op_math.cxx15
1 files changed, 5 insertions, 10 deletions
diff --git a/sc/source/core/opencl/op_math.cxx b/sc/source/core/opencl/op_math.cxx
index 4fc7b3c10e1a..9e676a4f7447 100644
--- a/sc/source/core/opencl/op_math.cxx
+++ b/sc/source/core/opencl/op_math.cxx
@@ -2386,24 +2386,17 @@ void OpCeil::GenSlidingWindowFunction(std::stringstream &ss,
ss << " double bAbs = 0;\n";
#ifdef ISNAN
FormulaToken *iNum = vSubArguments[0]->GetFormulaToken();
- const formula::SingleVectorRefToken* tmpCurDVRNum=
- dynamic_cast<const formula::SingleVectorRefToken*>(iNum);
FormulaToken *iSignificance = vSubArguments[1]->GetFormulaToken();
- const formula::SingleVectorRefToken* tmpCurDVRSignificance=
- dynamic_cast<const formula::SingleVectorRefToken*>(iSignificance);
- ss << " int buffer_num_len = "<<tmpCurDVRNum->GetArrayLength() << ";\n";
- ss << " int buffer_significance_len = ";
- ss << tmpCurDVRSignificance->GetArrayLength() << ";\n";
- ss << " if((gid0)>=buffer_num_len || isNan(";
+ ss << " if(isNan(";
ss << vSubArguments[0]->GenSlidingWindowDeclRef() << "))\n";
ss << " num = " << GetBottom() << ";\n";
ss << " else\n ";
#endif
ss << " num = " << vSubArguments[0]->GenSlidingWindowDeclRef() << ";\n";
#ifdef ISNAN
- ss << " if((gid0)>=buffer_significance_len || isNan(";
+ ss << " if(isNan(";
ss << vSubArguments[1]->GenSlidingWindowDeclRef() << "))\n";
- ss << " significance = " << GetBottom() << ";\n";
+ ss << " return 0.0;\n";
ss << " else\n ";
#endif
ss << " significance = ";
@@ -2435,6 +2428,8 @@ void OpCeil::GenSlidingWindowFunction(std::stringstream &ss,
#endif
ss << " bAbs = "<<vSubArguments[2]->GenSlidingWindowDeclRef()<<";\n";
}
+ ss << " if(significance == 0.0)\n";
+ ss << " return 0.0;\n";
ss << " return ";
ss << "( !(int)bAbs && num < 0.0 ? floor( num / significance ) : ";
ss << "ceil( num / significance ) )";