From: Dieter K. <cra...@us...> - 2009-06-25 16:53:19
|
Update of /cvsroot/maxima/maxima/src In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv5225 Modified Files: simp.lisp Log Message: Preserve the type of the number zero, when removing a term in PLUSIN. Do not simplify a 1.0 or 1.0b0 as an exponent away. One change in the testsuite: rtest9.mac problem 67: The taylor expansion does not simplify as expected to an expression with floating point numbers. The comparision with an expression in terms of floating point numbers now fails. The result has been adjusted. No more problems with the testsuite. Related bug report: Inconsistent simplification of 1.0*x etc. - ID: 751934 Index: simp.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/simp.lisp,v retrieving revision 1.80 retrieving revision 1.81 diff -u -d -r1.80 -r1.81 --- simp.lisp 23 Jun 2009 20:10:22 -0000 1.80 +++ simp.lisp 25 Jun 2009 16:53:08 -0000 1.81 @@ -814,6 +814,9 @@ (mxorlistp (caddr (cadr fm)))) (return (rplacd fm (cons (constmx 0 (caddr (cadr fm))) (cddr fm)))))) + ;; (cadadr fm) is zero. + ;; Add it to the first term of fm to preserve the type. + (rplaca fm (add (car fm) (cadadr fm))) (return (rplacd fm (cddr fm))) equt ;; Call muln to get a simplified product. @@ -1443,8 +1446,14 @@ (defmfun exptrl (r1 r2) (cond ((equal r2 1) r1) - ((equal r2 1.0) (cond ((mnump r1) (addk 0.0 r1)) (t r1))) - ((equal r2 bigfloatone) (cond ((mnump r1) ($bfloat r1)) (t r1))) + ((equal r2 1.0) + (cond ((mnump r1) (addk 0.0 r1)) + ;; Do not simplify the type of the number away. + (t (list '(mexpt simp) r1 1.0)))) + ((equal r2 bigfloatone) + (cond ((mnump r1) ($bfloat r1)) + ;; Do not simplify the type of the number away. + (t (list '(mexpt simp) r1 bigfloatone)))) ((zerop1 r1) (cond ((or (zerop1 r2) (mnegp r2)) (if (not errorsw) |