fix root error after spec error and toString on poly with coef < %eps 42/16042/1
Antoine ELIAS [Wed, 25 Feb 2015 16:06:32 +0000 (17:06 +0100)]
Change-Id: Id1ec9da5a5da747b42fe036a501f0609b7085ccf

scilab/modules/ast/src/cpp/types/singlepoly.cpp
scilab/modules/polynomials/sci_gateway/cpp/sci_roots.cpp

index f6e8080..484bb2b 100644 (file)
@@ -288,13 +288,12 @@ bool SinglePoly::evaluate(double _dblInR, double _dblInI, double *_pdblOutR, dou
 
 void SinglePoly::updateRank(void)
 {
-    double dblEps = getRelativeMachinePrecision();
     int iNewRank = getRank();
     if (m_pImgData)
     {
         for (int i = getRank(); i > 0 ; i--)
         {
-            if (fabs(m_pRealData[i]) <= dblEps && abs(m_pImgData[i]) <= dblEps)
+            if (fabs(m_pRealData[i]) == 0.0 && abs(m_pImgData[i]) == 0.0)
             {
                 iNewRank--;
             }
@@ -308,7 +307,7 @@ void SinglePoly::updateRank(void)
     {
         for (int i = getRank(); i > 0 ; i--)
         {
-            if (fabs(m_pRealData[i]) <= dblEps)
+            if (fabs(m_pRealData[i]) == 0.0)
             {
                 iNewRank--;
             }
@@ -367,7 +366,7 @@ void SinglePoly::toStringInternal(double *_pdblVal, wstring _szVar, list<wstring
     int iLastFlush = 2;
     for (int i = 0 ; i < m_iSize ; i++)
     {
-        if (isRealZero(_pdblVal[i]) == false)
+        //if (isRealZero(_pdblVal[i]) == false)
         {
             DoubleFormat df;
             getDoubleFormat(_pdblVal[i], &df);
index fd84913..83d4af5 100644 (file)
@@ -44,6 +44,7 @@ types::Function::ReturnValue sci_roots(types::typed_list &in, int _iRetCount, ty
     int imOne = -1;
     int iSize = 0;
     bool bComplex = false;
+    types::Function::ReturnValue ret = types::Function::OK;
 
     if (in.size() < 1 || in.size() > 2)
     {
@@ -252,7 +253,7 @@ types::Function::ReturnValue sci_roots(types::typed_list &in, int _iRetCount, ty
         types::optional_list tlOpt;
         tlInput.push_back(pDblOut);
         types::Function *funcSpec = symbol::Context::getInstance()->get(symbol::Symbol(L"spec"))->getAs<types::Function>();
-        funcSpec->call(tlInput, tlOpt, 1, out, &exec);
+        ret = funcSpec->call(tlInput, tlOpt, 1, out, &exec);
     }
 
     if (pDblIn)
@@ -264,7 +265,7 @@ types::Function::ReturnValue sci_roots(types::typed_list &in, int _iRetCount, ty
         }
     }
 
-    return types::Function::OK;
+    return ret;
 }
 /*--------------------------------------------------------------------------*/