sc/source/core/opencl/op_statistical.cxx         |  523 +----------------------
 sc/source/core/opencl/op_statistical.hxx         |    7 
 sc/source/core/opencl/op_statistical_helpers.hxx |   15 
 3 files changed, 53 insertions(+), 492 deletions(-)

New commits:
commit 68ae0798078cbc9daa8ea951e0f5e7de55042f70
Author:     Luboš Luňák <l.lu...@collabora.com>
AuthorDate: Tue Sep 20 09:57:41 2022 +0200
Commit:     Luboš Luňák <l.lu...@collabora.com>
CommitDate: Tue Sep 20 17:53:47 2022 +0200

    reduce opencl copy&paste (gaussinv)
    
    Change-Id: I44e5c74c903bab46a54b5b855f2665d924ac91fb
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140225
    Tested-by: Jenkins
    Reviewed-by: Luboš Luňák <l.lu...@collabora.com>

diff --git a/sc/source/core/opencl/op_statistical.cxx 
b/sc/source/core/opencl/op_statistical.cxx
index f2d32c7eefa1..459057f80e8f 100644
--- a/sc/source/core/opencl/op_statistical.cxx
+++ b/sc/source/core/opencl/op_statistical.cxx
@@ -1089,6 +1089,13 @@ void OpPhi::GenSlidingWindowFunction(
     ss << "}\n";
 }
 
+void OpNorminv::BinInlineFun(std::set<std::string>& decls,
+    std::set<std::string>& funs)
+{
+    decls.insert(gaussinvDecl);
+    funs.insert(gaussinv);
+}
+
 void OpNorminv::GenSlidingWindowFunction(
     outputstream &ss,const std::string &sSymName,
     SubArguments &vSubArguments)
@@ -1096,168 +1103,25 @@ void OpNorminv::GenSlidingWindowFunction(
     CHECK_PARAMETER_COUNT( 3, 3 );
     GenerateFunctionDeclaration( sSymName, vSubArguments, ss );
     ss << "{\n";
-    ss <<"    double q,t,z;\n";
+    ss << "    int gid0=get_global_id(0);\n";
     GenerateArg( "x", 0, vSubArguments, ss );
     GenerateArg( "mue", 1, vSubArguments, ss );
     GenerateArg( "sigma", 2, vSubArguments, ss );
-    ss <<"    q = x -0.5;\n";
-    ss <<"    if(fabs(q)<=.425)\n";
-    ss <<"   {\n";
-    ss <<"        t=0.180625-pow(q,2);\n";
-    ss <<"        z=\n"
-    "q*\n"
-    "(\n"
-            "(\n"
-                "(\n"
-                    "(\n"
-                        "(\n"
-                            "(\n"
-                                "(\n"
-                                    "t*2509.0809287301226727";
-    ss <<"+33430.575583588128105\n"
-                                ")\n"
-                                "*t+67265.770927008700853\n"
-                            ")\n"
-                            "*t+45921.953931549871457\n"
-                        ")\n"
-                        "*t+13731.693765509461125\n"
-                    ")\n"
-                    "*t+1971.5909503065514427\n"
-                ")\n"
-                "*t+133.14166789178437745\n"
-            ")\n"
-            "*t+3.387132872796366608\n"
-        ")\n"
-        "/\n"
-        "(\n"
-            "(\n"
-                "(\n"
-                    "(\n"
-                        "(\n"
-                            "(\n"
-                                "(\n"
-                                    "t*5226.495278852854561";
-    ss <<"+28729.085735721942674\n"
-                                ")\n"
-                                "*t+39307.89580009271061\n"
-                            ")\n"
-                            "*t+21213.794301586595867\n"
-                        ")\n"
-                        "*t+5394.1960214247511077\n"
-                    ")\n"
-                    "*t+687.1870074920579083\n"
-                ")\n"
-                "*t+42.313330701600911252\n"
-            ")\n"
-            "*t+1.0\n"
-    ");\n";
-    ss <<"}\nelse\n{\n";
-    ss <<" if(q>0)\nt=1-x;\n";
-    ss <<"else\nt=x;\n";
-    ss <<"t=sqrt(-log(t));\n";
-    ss <<"if(t<=5.0)\n{\n";
-    ss <<"t+=-1.6;\n";
-    ss <<"z=\n"
-            "(\n"
-                "(\n"
-                    "(\n"
-                        "(\n"
-                            "(\n"
-                               "(\n"
-                                   "(\n"
-                                        "t*7.7454501427834140764e-4";
-    ss <<"+0.0227238449892691845833\n"
-                                    ")\n"
-                                    "*t+0.24178072517745061177\n"
-                                ")\n"
-                                "*t+1.27045825245236838258\n"
-                            ")\n"
-                            "*t+3.64784832476320460504\n"
-                        ")\n"
-                        "*t+5.7694972214606914055\n"
-                    ")\n"
-                    "*t+4.6303378461565452959\n"
-                ")\n"
-                "*t+1.42343711074968357734\n"
-            ")\n"
-            "/\n"
-            "(\n"
-                "(\n"
-                    "(\n"
-                        "(\n"
-                            "(\n"
-                                "(\n"
-                                    "(\n"
-                                        "t*1.05075007164441684324e-9";
-    ss <<"+5.475938084995344946e-4\n"
-                                    ")\n"
-                                    "*t+0.0151986665636164571966\n"
-                                ")\n"
-                                "*t+0.14810397642748007459\n"
-                            ")\n"
-                            "*t+0.68976733498510000455\n"
-                        ")\n"
-                        "*t+1.6763848301838038494\n"
-                    ")\n"
-                    "*t+2.05319162663775882187\n"
-                ")\n"
-                "*t+1.0\n"
-            ");\n}\n";
-    ss <<"else\n{\n";
-    ss <<"t+=-5.0;\n";
-    ss <<"z=\n"
-            "(\n"
-                "(\n"
-                    "(\n"
-                        "(\n"
-                            "(\n"
-                                "(\n"
-                                    "(\n"
-                                        "t*2.01033439929228813265e-7";
-    ss<<"+2.71155556874348757815e-5\n"
-                                    ")\n"
-                                    "*t+0.0012426609473880784386\n"
-                                ")\n"
-                                "*t+0.026532189526576123093\n"
-                            ")\n"
-                            "*t+0.29656057182850489123\n"
-                        ")\n"
-                        "*t+1.7848265399172913358\n"
-                    ")\n"
-                    "*t+5.4637849111641143699\n"
-                ")\n"
-                "*t+6.6579046435011037772\n"
-            ")\n"
-            "/\n"
-            "(\n"
-                "(\n"
-                    "(\n"
-                        "(\n"
-                            "(\n"
-                                "(\n"
-                                    "(\n"
-                                        "t*2.04426310338993978564e-15"
-          "+1.4215117583164458887e-7\n"
-                                    ")\n"
-                                    "*t+1.8463183175100546818e-5\n"
-                                ")\n"
-                                "*t+7.868691311456132591e-4\n"
-                            ")\n"
-                            "*t+0.0148753612908506148525\n"
-                        ")\n"
-                        "*t+0.13692988092273580531\n"
-                    ")\n"
-                    "*t+0.59983220655588793769\n"
-                ")\n"
-                "*t+1.0\n"
-            ");\n";
-    ss<<"}\n";
-    ss << "z = q < 0.0 ? (-1)*z : z;\n";
-    ss<<"}\n";
-    ss<<"double tmp =  z*sigma + mue;\n";
-    ss<<"return tmp;\n";
-    ss<<"}\n";
+    ss << "    if (sigma <= 0.0 || x < 0.0 || x > 1.0)\n";
+    ss << "        return CreateDoubleError(IllegalArgument);\n";
+    ss << "    else if (x == 0.0 || x == 1.0)\n";
+    ss << "        return CreateDoubleError(NoValue);\n";
+    ss << "    return gaussinv(x)*sigma + mue;\n";
+    ss << "}\n";
 }
+
+void OpNormsinv::BinInlineFun(std::set<std::string>& decls,
+    std::set<std::string>& funs)
+{
+    decls.insert(gaussinvDecl);
+    funs.insert(gaussinv);
+}
+
 void OpNormsinv:: GenSlidingWindowFunction
     (outputstream &ss,const std::string &sSymName,
     SubArguments &vSubArguments)
@@ -1265,168 +1129,16 @@ void OpNormsinv:: GenSlidingWindowFunction
     CHECK_PARAMETER_COUNT( 1, 1 );
     GenerateFunctionDeclaration( sSymName, vSubArguments, ss );
     ss << "{\n";
-    ss << "    double q,t,z;\n";
     ss << "    int gid0=get_global_id(0);\n";
     GenerateArg( "x", 0, vSubArguments, ss );
-    ss <<"    q = x -0.5;\n";
-    ss <<"    if(fabs(q)<=.425)\n";
-    ss <<"    {\n";
-    ss <<"        t=0.180625-pow(q,2);\n";
-    ss <<"        z=\n"
-         "q*\n"
-         "(\n"
-            "(\n"
-                "(\n"
-                    "(\n"
-                        "(\n"
-                            "(\n"
-                                "(\n"
-                                    "t*2509.0809287301226727";
-    ss <<"+33430.575583588128105\n"
-                                ")\n"
-                                "*t+67265.770927008700853\n"
-                            ")\n"
-                            "*t+45921.953931549871457\n"
-                        ")\n"
-                        "*t+13731.693765509461125\n"
-                    ")\n"
-                    "*t+1971.5909503065514427\n"
-                ")\n"
-                "*t+133.14166789178437745\n"
-            ")\n"
-            "*t+3.387132872796366608\n"
-        ")\n"
-        "/\n"
-        "(\n"
-            "(\n"
-                "(\n"
-                    "(\n"
-                        "(\n"
-                            "(\n"
-                                "(\n"
-                                    "t*5226.495278852854561";
-    ss <<"+28729.085735721942674\n"
-                                ")\n"
-                                "*t+39307.89580009271061\n"
-                            ")\n"
-                            "*t+21213.794301586595867\n"
-                        ")\n"
-                        "*t+5394.1960214247511077\n"
-                    ")\n"
-                    "*t+687.1870074920579083\n"
-                ")\n"
-                "*t+42.313330701600911252\n"
-            ")\n"
-            "*t+1.0\n"
-         ");\n";
-    ss <<"}\nelse\n{\n";
-    ss <<" if(q>0)\nt=1-x;\n";
-    ss <<"else\nt=x;\n";
-    ss <<"t=sqrt(-log(t));\n";
-    ss <<"if(t<=5.0)\n{\n";
-    ss <<"t+=-1.6;\n";
-    ss <<"z=\n"
-            "(\n"
-                "(\n"
-                    "(\n"
-                        "(\n"
-                            "(\n"
-                               "(\n"
-                                   "(\n"
-                                        "t*7.7454501427834140764e-4";
-    ss <<"+0.0227238449892691845833\n"
-                                    ")\n"
-                                    "*t+0.24178072517745061177\n"
-                                ")\n"
-                                "*t+1.27045825245236838258\n"
-                            ")\n"
-                            "*t+3.64784832476320460504\n"
-                        ")\n"
-                        "*t+5.7694972214606914055\n"
-                    ")\n"
-                    "*t+4.6303378461565452959\n"
-                ")\n"
-                "*t+1.42343711074968357734\n"
-            ")\n"
-            "/\n"
-            "(\n"
-                "(\n"
-                    "(\n"
-                        "(\n"
-                            "(\n"
-                                "(\n"
-                                    "(\n"
-                                        "t*1.05075007164441684324e-9";
-    ss <<"+5.475938084995344946e-4\n"
-                                    ")\n"
-                                    "*t+0.0151986665636164571966\n"
-                                ")\n"
-                                "*t+0.14810397642748007459\n"
-                            ")\n"
-                            "*t+0.68976733498510000455\n"
-                        ")\n"
-                        "*t+1.6763848301838038494\n"
-                    ")\n"
-                    "*t+2.05319162663775882187\n"
-                ")\n"
-                "*t+1.0\n"
-            ");\n}\n";
-    ss <<"else\n{\n";
-    ss <<"t+=-5.0;\n";
-    ss <<"z=\n"
-            "(\n"
-                "(\n"
-                    "(\n"
-                        "(\n"
-                            "(\n"
-                                "(\n"
-                                    "(\n"
-                                        "t*2.01033439929228813265e-7";
-    ss <<"+2.71155556874348757815e-5\n"
-                                    ")\n"
-                                    "*t+0.0012426609473880784386\n"
-                                ")\n"
-                                "*t+0.026532189526576123093\n"
-                            ")\n"
-                            "*t+0.29656057182850489123\n"
-                        ")\n"
-                        "*t+1.7848265399172913358\n"
-                    ")\n"
-                    "*t+5.4637849111641143699\n"
-                ")\n"
-                "*t+6.6579046435011037772\n"
-            ")\n"
-            "/\n"
-            "(\n"
-                "(\n"
-                    "(\n"
-                        "(\n"
-                            "(\n"
-                                "(\n"
-                                    "(\n"
-                                        "t*2.04426310338993978564e-15"
-          "+1.4215117583164458887e-7\n"
-                                    ")\n"
-                                    "*t+1.8463183175100546818e-5\n"
-                                ")\n"
-                                "*t+7.868691311456132591e-4\n"
-                            ")\n"
-                            "*t+0.0148753612908506148525\n"
-                        ")\n"
-                        "*t+0.13692988092273580531\n"
-                    ")\n"
-                    "*t+0.59983220655588793769\n"
-                ")\n"
-                "*t+1.0\n"
-            ");\n";
-    ss <<"}\n";
-    ss << "z = q < 0.0 ? (-1)*z : z;\n";
-    ss <<"}\n";
-    ss <<"if (isnan(z))\n";
-    ss <<"    return CreateDoubleError(NoValue);\n";
-    ss <<"return z;\n";
-    ss <<"}\n";
+    ss << "    if (x < 0.0 || x > 1.0)\n";
+    ss << "        return CreateDoubleError(IllegalArgument);\n";
+    ss << "    else if (x == 0.0 || x == 1.0)\n";
+    ss << "        return CreateDoubleError(NoValue);\n";
+    ss << "    return gaussinv(x);\n";
+    ss << "}\n";
 }
+
 void OpMedian::GenSlidingWindowFunction(
     outputstream &ss, const std::string &sSymName,
     SubArguments &vSubArguments)
@@ -1526,6 +1238,13 @@ void OpKurt:: GenSlidingWindowFunction(outputstream &ss,
     ss << "}";
 }
 
+void OpLogInv::BinInlineFun(std::set<std::string>& decls,
+    std::set<std::string>& funs)
+{
+    decls.insert(gaussinvDecl);
+    funs.insert(gaussinv);
+}
+
 void OpLogInv:: GenSlidingWindowFunction(outputstream &ss,
             const std::string &sSymName, SubArguments &vSubArguments)
 {
@@ -1534,170 +1253,12 @@ void OpLogInv:: GenSlidingWindowFunction(outputstream 
&ss,
     ss << "{\n";
     ss << "    int gid0=get_global_id(0);\n";
     ss << "    double tmp;\n";
-    GenerateArg( 0, vSubArguments, ss );
-    GenerateArgWithDefault( "arg1", 1, 0, vSubArguments, ss );
-    GenerateArgWithDefault( "arg2", 2, 1, vSubArguments, ss );
-    ss<< "    double q,t,z;\n";
-    ss<< "    q = arg0 -0.5;\n";
-    ss<< "    if(fabs(q)<=.425)\n";
-    ss<< "    {\n";
-    ss<< "        t=0.180625-pow(q, 2);\n";
-    ss<< "        z=\n"
-    "        q*\n"
-    "        (\n"
-    "            (\n"
-    "                (\n"
-    "                    (\n"
-    "                        (\n"
-    "                            (\n"
-    "                                (\n"
-    "                                    t*2509.0809287301226727";
-    ss<<"+33430.575583588128105\n"
-    "                                )\n"
-    "                                *t+67265.770927008700853\n"
-    "                            )\n"
-    "                            *t+45921.953931549871457\n"
-    "                        )\n"
-    "                        *t+13731.693765509461125\n"
-    "                    )\n"
-    "                    *t+1971.5909503065514427\n"
-    "                )\n"
-    "                *t+133.14166789178437745\n"
-    "            )\n"
-    "            *t+3.387132872796366608\n"
-    "        )\n"
-    "        /\n"
-    "        (\n"
-    "            (\n"
-    "                (\n"
-    "                    (\n"
-    "                        (\n"
-    "                            (\n"
-    "                                (\n"
-    "                                    t*5226.495278852854561";
-    ss<<"+28729.085735721942674\n"
-    "                                )\n"
-    "                                *t+39307.89580009271061\n"
-    "                            )\n"
-    "                            *t+21213.794301586595867\n"
-    "                        )\n"
-    "                        *t+5394.1960214247511077\n"
-    "                    )\n"
-    "                    *t+687.1870074920579083\n"
-    "                )\n"
-    "                *t+42.313330701600911252\n"
-    "            )\n"
-    "            *t+1.0\n"
-    "        );\n";
-    ss<<"    }\n";
-    ss<<"    else\n";
-    ss<<"    {\n";
-    ss<<"        t = q > 0 ? 1 - arg0 : arg0;\n";
-    ss<<"        t=sqrt(-log(t));\n";
-    ss<<"        if(t<=5.0)\n";
-    ss<<"        {\n";
-    ss<<"            t+=-1.6;\n";
-    ss<<"            z=\n"
-    "            (\n"
-    "                (\n"
-    "                    (\n"
-    "                        (\n"
-    "                            (\n"
-    "                                (\n"
-    "                                    (\n"
-    "                                        t*7.7454501427834140764e-4";
-    ss<<"+0.0227238449892691845833\n"
-    "                                    )\n"
-    "                                    *t+0.24178072517745061177\n"
-    "                                )\n"
-    "                                *t+1.27045825245236838258\n"
-    "                            )\n"
-    "                            *t+3.64784832476320460504\n"
-    "                        )\n"
-    "                        *t+5.7694972214606914055\n"
-    "                    )\n"
-    "                    *t+4.6303378461565452959\n"
-    "                )\n"
-    "                *t+1.42343711074968357734\n"
-    "            )\n"
-    "            /\n"
-    "            (\n"
-    "                (\n"
-    "                    (\n"
-    "                        (\n"
-    "                            (\n"
-    "                                (\n"
-    "                                    (\n"
-    "                                        t*1.05075007164441684324e-9";
-    ss<<"+5.475938084995344946e-4\n"
-    "                                    )\n"
-    "                                    *t+0.0151986665636164571966\n"
-    "                                )\n"
-    "                                *t+0.14810397642748007459\n"
-    "                            )\n"
-    "                            *t+0.68976733498510000455\n"
-    "                        )\n"
-    "                        *t+1.6763848301838038494\n"
-    "                    )\n"
-    "                    *t+2.05319162663775882187\n"
-    "                )\n"
-    "                *t+1.0\n"
-    "            );\n";
-    ss<<"        }\n";
-    ss<<"        else\n";
-    ss<<"        {\n";
-    ss<<"            t+=-5.0;\n";
-    ss<<"            z=\n"
-    "            (\n"
-    "                (\n"
-    "                    (\n"
-    "                        (\n"
-    "                            (\n"
-    "                                (\n"
-    "                                    (\n"
-    "                                        t*2.01033439929228813265e-7";
-    ss<<"+2.71155556874348757815e-5\n"
-    "                                    )\n"
-    "                                    *t+0.0012426609473880784386\n"
-    "                                )\n"
-    "                                *t+0.026532189526576123093\n"
-    "                            )\n"
-    "                            *t+0.29656057182850489123\n"
-    "                        )\n"
-    "                        *t+1.7848265399172913358\n"
-    "                    )\n"
-    "                    *t+5.4637849111641143699\n"
-    "                )\n"
-    "                *t+6.6579046435011037772\n"
-    "            )\n"
-    "            /\n"
-    "            (\n"
-    "                (\n"
-    "                    (\n"
-    "                        (\n"
-    "                            (\n"
-    "                                (\n"
-    "                                    (\n"
-    "                                        t*2.04426310338993978564e-15"
-    " +1.4215117583164458887e-7\n"
-    "                                    )\n"
-    "                                    *t+1.8463183175100546818e-5\n"
-    "                                )\n"
-    "                                *t+7.868691311456132591e-4\n"
-    "                            )\n"
-    "                            *t+0.0148753612908506148525\n"
-    "                        )\n"
-    "                        *t+0.13692988092273580531\n"
-    "                    )\n"
-    "                    *t+0.59983220655588793769\n"
-    "                )\n"
-    "                *t+1.0\n"
-    "            );\n";
-    ss << "        }\n";
-    ss << "        z = q < 0.0 ? (-1)*z : z;\n";
-    ss << "    }\n";
-    ss << "    tmp = exp(arg1+arg2*z);\n";
-    ss << "    return tmp;\n";
+    GenerateArg( "x", 0, vSubArguments, ss );
+    GenerateArgWithDefault( "mue", 1, 0, vSubArguments, ss );
+    GenerateArgWithDefault( "sigma", 2, 1, vSubArguments, ss );
+    ss << "    if ( sigma <= 0.0 || x <= 0.0 || x >= 1.0 )\n";
+    ss << "        return CreateDoubleError(IllegalArgument);\n";
+    ss << "    return exp(mue+sigma*gaussinv(x));\n";
     ss << "}\n";
 }
 
diff --git a/sc/source/core/opencl/op_statistical.hxx 
b/sc/source/core/opencl/op_statistical.hxx
index 64089b54f524..d2b685976fa8 100644
--- a/sc/source/core/opencl/op_statistical.hxx
+++ b/sc/source/core/opencl/op_statistical.hxx
@@ -214,13 +214,15 @@ class OpNorminv:public Normal{
     public:
     virtual void GenSlidingWindowFunction(outputstream &ss,
             const std::string &sSymName, SubArguments &vSubArguments) override;
-     virtual std::string BinFuncName() const override { return "OpNorminv"; }
+    virtual std::string BinFuncName() const override { return "OpNorminv"; }
+    virtual void BinInlineFun(std::set<std::string>& ,std::set<std::string>&) 
override;
 };
 class OpNormsinv:public Normal{
     public:
     virtual void GenSlidingWindowFunction(outputstream &ss,
             const std::string &sSymName, SubArguments &vSubArguments) override;
-     virtual std::string BinFuncName() const override { return "OpNormsinv"; }
+    virtual std::string BinFuncName() const override { return "OpNormsinv"; }
+    virtual void BinInlineFun(std::set<std::string>& ,std::set<std::string>&) 
override;
 };
 class OpPhi:public Normal{
     public:
@@ -268,6 +270,7 @@ public:
     virtual void GenSlidingWindowFunction(outputstream &ss,
             const std::string &sSymName, SubArguments &vSubArguments) override;
     virtual std::string BinFuncName() const override { return "LogInv"; }
+    virtual void BinInlineFun(std::set<std::string>& ,std::set<std::string>&) 
override;
 };
 class OpCritBinom: public Normal
 {
diff --git a/sc/source/core/opencl/op_statistical_helpers.hxx 
b/sc/source/core/opencl/op_statistical_helpers.hxx
index da86725296fe..5fb2f787eefb 100644
--- a/sc/source/core/opencl/op_statistical_helpers.hxx
+++ b/sc/source/core/opencl/op_statistical_helpers.hxx
@@ -745,7 +745,7 @@ const char gaussinv[] =
 "            )\n"
 "            *t+3.387132872796366608\n"
 "            )\n"
-"            *pow\n"
+"            /\n"
 "            (\n"
 "            (\n"
 "            (\n"
@@ -765,8 +765,7 @@ const char gaussinv[] =
 "            )\n"
 "            *t+42.313330701600911252\n"
 "            )\n"
-"            *t+1.0\n"
-"            , -1.0);\n"
+"            *t+1.0);\n"
 "    }\n"
 "    else\n"
 "    {\n"
@@ -798,7 +797,7 @@ const char gaussinv[] =
 "                )\n"
 "                *t+1.42343711074968357734\n"
 "                )\n"
-"                *pow\n"
+"                /\n"
 "                (\n"
 "                (\n"
 "                (\n"
@@ -818,8 +817,7 @@ const char gaussinv[] =
 "                )\n"
 "                *t+2.05319162663775882187\n"
 "                )\n"
-"                *t+1.0\n"
-"                , -1.0);\n"
+"                *t+1.0);\n"
 "        }\n"
 "        else\n"
 "        {\n"
@@ -846,7 +844,7 @@ const char gaussinv[] =
 "                )\n"
 "                *t+6.6579046435011037772\n"
 "                )\n"
-"                *pow\n"
+"                /\n"
 "                (\n"
 "                (\n"
 "                (\n"
@@ -866,8 +864,7 @@ const char gaussinv[] =
 "                )\n"
 "                *t+0.59983220655588793769\n"
 "                )\n"
-"                *t+1.0\n"
-"                , -1.0);\n"
+"                *t+1.0);\n"
 "        }\n"
 "        if(q<0.0) z=-z;\n"
 "    }\n"

Reply via email to