Added some abses to the code for numerical integration.
authorChris Dams <Chris.Dams@mi.infn.it>
Mon, 11 Dec 2006 15:38:40 +0000 (15:38 +0000)
committerChris Dams <Chris.Dams@mi.infn.it>
Mon, 11 Dec 2006 15:38:40 +0000 (15:38 +0000)
ginac/integral.cpp

index 0c42ed5fdcbd31075615b0818645c0057a168990..18fedb2e2d302550c812ea79691cf008f00ab457 100644 (file)
@@ -279,7 +279,7 @@ ex adaptivesimpson(const ex & x, const ex & a_in, const ex & b_in, const ex & f,
        fbvec[i] = subsvalue(x, b, f);
        svec[i] = hvec[i]*(favec[i]+4*fcvec[i]+fbvec[i])/3;
        lvec[i] = 1;
-       errorvec[i] = error*svec[i];
+       errorvec[i] = error*abs(svec[i]);
 
        while (i>0) {
                ex fd = subsvalue(x, avec[i]+hvec[i]/2, f);
@@ -292,7 +292,7 @@ ex adaptivesimpson(const ex & x, const ex & a_in, const ex & b_in, const ex & f,
                ex nu4 = fbvec[i];
                ex nu5 = hvec[i];
                // hopefully prevents a crash if the function is zero sometimes.
-               ex nu6 = max(errorvec[i], (s1+s2)*error);
+               ex nu6 = max(errorvec[i], abs(s1+s2)*error);
                ex nu7 = svec[i];
                int nu8 = lvec[i];
                --i;