author Jens Vollinga Thu, 21 Aug 2008 20:37:09 +0000 (22:37 +0200) committer Jens Vollinga Thu, 21 Aug 2008 20:37:09 +0000 (22:37 +0200)
and cln::sqrt conversion was buggy).

 check/exam_factor.cpp patch | blob | history ginac/factor.cpp patch | blob | history

index bf1751a..7e15648 100644 (file)
@@ -83,12 +83,17 @@ static unsigned exam_factor1()
result += check_factor(e);

e = ex("x*(2+x^2)*(1+x+x^3+x^2+x^6+x^5+x^4)*(1+x)^2*(1-x+x^2)^2*(-1+x)", syms);
-
result += check_factor(e);

e = ex("(x+4+x^2-x^3+43*x^4)*(x+1-x^2-3*x^3+4*x^4)", syms);
result += check_factor(e);

+       e = ex("-x^2*(x-1)*(1+x^2)", syms);
+       result += check_factor(e);
+
+       e = x;
+       result += check_factor(e);
+
return result;
}

index 5489b4c..9b06e6e 100644 (file)
@@ -888,7 +888,7 @@ static ex hensel_univar(const ex& a_, const ex& x, unsigned int p, const UniPoly
for ( int i=a.degree(x); i>=a.ldegree(x); --i ) {
maxcoeff += pow(abs(a.coeff(x, i)),2);
}
-       cl_I normmc = ceiling1(the<cl_F>(cln::sqrt(ex_to<numeric>(maxcoeff).to_cl_N())));
+       cl_I normmc = ceiling1(the<cl_R>(cln::sqrt(ex_to<numeric>(maxcoeff).to_cl_N())));
unsigned int maxdegree = (u1_.degree() > w1_.degree()) ? u1_.degree() : w1_.degree();
unsigned int B = cl_I_to_uint(normmc * expt_pos(cl_I(2), maxdegree));

@@ -1233,6 +1233,9 @@ ex factor(const ex& poly)
}
return res;
}
+       if ( is_a<symbol>(sfpoly) ) {
+               return poly;
+       }
// case: (polynomial)
ex f = factor_sqrfree(sfpoly);
return f;