From: Raymond T. <rt...@us...> - 2009-01-25 16:22:02
|
Update of /cvsroot/maxima/maxima/src In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv9427 Modified Files: numeric.lisp Log Message: Fix issues in bigfloat:to, mentioned by Dieter, 2009/01/25. o Recognize '$%i and return #c(0 1) o Recognize and convert Maxima complex numbers containing rational parts. Thus, 1/2+0.5*%i becomes #c(0.5 0.5). Index: numeric.lisp =================================================================== RCS file: /cvsroot/maxima/maxima/src/numeric.lisp,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- numeric.lisp 25 Jan 2009 02:49:01 -0000 1.15 +++ numeric.lisp 25 Jan 2009 16:21:56 -0000 1.16 @@ -1090,6 +1090,9 @@ (t (cond ((cl:realp maxima-num) maxima-num) + ((eq maxima-num 'maxima::$%i) + ;; Convert %i to an exact complex rational. + #c(0 1)) ((consp maxima-num) ;; Some kind of maxima number (cond ((maxima::ratnump maxima-num) @@ -1099,8 +1102,12 @@ (bigfloat maxima-num)) ((maxima::complex-number-p maxima-num #'(lambda (x) (or (cl:realp x) - (maxima::$bfloatp x)))) - ;; We have some kind of complex number + (maxima::$bfloatp x) + (and (consp x) + (eq (caar x) 'maxima::rat))))) + ;; We have some kind of complex number whose + ;; parts are a cl:real, a bfloat, or a Maxima + ;; rational. (let ((re (maxima::$realpart maxima-num)) (im (maxima::$imagpart maxima-num))) (to re im))))) |