diff options
Diffstat (limited to 'sc/source/core/opencl')
-rw-r--r-- | sc/source/core/opencl/op_statistical.cxx | 39 | ||||
-rw-r--r-- | sc/source/core/opencl/opinlinefun_statistical.cxx | 18 |
2 files changed, 29 insertions, 28 deletions
diff --git a/sc/source/core/opencl/op_statistical.cxx b/sc/source/core/opencl/op_statistical.cxx index 9c3def58ba76..41436a84c113 100644 --- a/sc/source/core/opencl/op_statistical.cxx +++ b/sc/source/core/opencl/op_statistical.cxx @@ -597,18 +597,18 @@ void OpTTest::GenSlidingWindowFunction(std::stringstream &ss, } ss << "){\n"; ss << " int gid0 = get_global_id(0);\n"; - ss << " double fSum1=0.0;\n"; - ss << " double fSum2=0.0;\n"; - ss << " double fSumSqr1=0.0;\n"; - ss << " double fSumSqr2=0.0;\n"; - ss << " double fCount1=0.0;\n"; - ss << " double fCount2=0.0;\n"; - ss << " double arg1=0.0;\n"; - ss << " double arg2=0.0;\n"; - ss << " double mode=0.0;\n"; - ss << " double type=0.0;\n"; - ss << " double fT=0.0;\n"; - ss << " double fF=0.0;\n"; + ss << " double fSum1 = 0.0;\n"; + ss << " double fSum2 = 0.0;\n"; + ss << " double fSumSqr1 = 0.0;\n"; + ss << " double fSumSqr2 = 0.0;\n"; + ss << " double fCount1 = 0.0;\n"; + ss << " double fCount2 = 0.0;\n"; + ss << " double arg1 = 0.0;\n"; + ss << " double arg2 = 0.0;\n"; + ss << " double mode = 0.0;\n"; + ss << " double type = 0.0;\n"; + ss << " double fT = 0.0;\n"; + ss << " double fF = 0.0;\n"; if(vSubArguments.size() != 4) { ss << " return DBL_MAX;\n"; @@ -625,7 +625,7 @@ void OpTTest::GenSlidingWindowFunction(std::stringstream &ss, assert(pCur1); assert(pCur2); assert(pCur3); - if(ocPush==vSubArguments[2]->GetFormulaToken()->GetOpCode()) + if(ocPush == vSubArguments[2]->GetFormulaToken()->GetOpCode()) { if(pCur2->GetType() == formula::svSingleVectorRef) { @@ -635,20 +635,23 @@ void OpTTest::GenSlidingWindowFunction(std::stringstream &ss, #ifdef ISNAN ss << " if (gid0 < " << pSVR->GetArrayLength() << ")\n"; ss << " {\n"; - ss << " if (isNan("; - ss << vSubArguments[2]->GenSlidingWindowDeclRef() << "))\n"; +#endif + ss << " mode = " ; + ss << vSubArguments[2]->GenSlidingWindowDeclRef() << ";\n"; +#ifdef ISNAN + ss << " if (isNan(mode))\n"; ss << " mode = 0.0;\n"; ss << " else\n"; #endif - ss << " mode = floor(" ; - ss << vSubArguments[2]->GenSlidingWindowDeclRef() << ");\n"; + ss << " mode = floor(mode);\n"; #ifdef ISNAN ss << " }\n"; #endif } else if(pCur2->GetType() == formula::svDouble) { - ss << " mode = floor(" << pCur2->GetDouble() << ");\n"; + ss << " mode = floor(convert_double("; + ss << pCur2->GetDouble() << "));\n"; } else { diff --git a/sc/source/core/opencl/opinlinefun_statistical.cxx b/sc/source/core/opencl/opinlinefun_statistical.cxx index 59221c6dfc9b..8fbd1eb92c32 100644 --- a/sc/source/core/opencl/opinlinefun_statistical.cxx +++ b/sc/source/core/opencl/opinlinefun_statistical.cxx @@ -191,7 +191,7 @@ std::string GetBetaDist = " double flnX = log(fXin);\n" " double fA = fAlpha;\n" " double fB = fBeta;\n" -" bool bReflect = fXin > fAlpha/(fAlpha+fBeta);\n" +" bool bReflect = fXin > fAlpha*pow((fAlpha+fBeta),-1.0);\n" " if (bReflect)\n" " {\n" " fA = fBeta;\n" @@ -201,16 +201,13 @@ std::string GetBetaDist = " flnX = flnY;\n" " flnY = log(fXin);\n" " }\n" -" fResult = lcl_GetBetaHelperContFrac(fX,fA,fB);\n" -" fResult = fResult/fA;\n" -" double fP = fA/(fA+fB);\n" -" double fQ = fB/(fA+fB);\n" -" double fTemp;\n" +" fResult = lcl_GetBetaHelperContFrac(fX,fA,fB)*pow(fA,-1.0);\n" +" double fP = fA*pow((fA+fB),-1.0);\n" +" double fQ = fB*pow((fA+fB),-1.0);\n" " if (fA > 1.0 && fB > 1.0 && fP < 0.97 && fQ < 0.97)\n" -" fTemp = GetBetaDistPDF(fX,fA,fB)*fX*fY;\n" +" fResult *= GetBetaDistPDF(fX,fA,fB)*fX*fY;\n" " else\n" -" fTemp = exp(fA*flnX + fB*flnY - GetLogBeta(fA,fB));\n" -" fResult *= fTemp;\n" +" fResult *= exp(fA*flnX + fB*flnY - GetLogBeta(fA,fB));\n" " if (bReflect)\n" " fResult = 0.5 - fResult + 0.5;\n" " if (fResult > 1.0)\n" @@ -219,6 +216,7 @@ std::string GetBetaDist = " fResult = 0.0;\n" " return fResult;\n" "}\n"; + std::string GetFDistDecl = "double GetFDist(double x, double fF1, double fF2);\n"; std::string GetFDist = @@ -1060,7 +1058,7 @@ std::string GetTDistDecl=" double GetTDist(double T, double fDF);\n"; std::string GetTDist = "double GetTDist(double T, double fDF)\n" "{\n" -" return 0.5 * GetBetaDist(fDF/(fDF+T*T), fDF/2.0, 0.5);\n" +" return 0.5 * GetBetaDist(fDF*pow(fDF+T*T,-1.0),fDF*pow(2.0,-1.0), 0.5);\n" "}\n"; std::string GetBetaDecl=" double GetBeta(double fAlpha, double fBeta);\n"; |