diff options
author | yangzhang <yangzhang@multicorewareinc.com> | 2013-12-17 14:19:48 +0800 |
---|---|---|
committer | I-Jui (Ray) Sung <ray@multicorewareinc.com> | 2013-12-19 17:54:05 -0600 |
commit | 774b8342ac15cdb06e9069cfac19c982ec6ca79e (patch) | |
tree | dc4e98521317507be6d2af1429b6446f62ffbb6d | |
parent | 1f0b4ad3341af3c6f3c309a303bd3008debcb9b3 (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.cxx | 15 |
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 ) )"; |