diff --git a/compiler/float-tran.lisp b/compiler/float-tran.lisp index 19bd250ad69dfba09915169f3a01ae7f968788c9..b9c2510cc5a9bf06b2f3dba3f8436232ff0c188c 100644 --- a/compiler/float-tran.lisp +++ b/compiler/float-tran.lisp @@ -5,7 +5,7 @@ ;;; Carnegie Mellon University, and has been placed in the public domain. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/float-tran.lisp,v 1.95 2003/09/12 12:55:19 gerd Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/float-tran.lisp,v 1.96 2004/01/09 04:20:59 toy Exp $") ;;; ;;; ********************************************************************** ;;; @@ -1007,12 +1007,16 @@ ;; A real raised to an integer power is well-defined (merged-interval-expt x y)) (t - ;; A real raised to a non-integral power can be a float or a - ;; complex number. + ;; A real raised to a non-integral power is complicated.... (cond ((or (csubtypep x (specifier-type '(rational 0))) (csubtypep x (specifier-type '(float (0d0))))) - ;; But a positive real to any power is well-defined. + ;; A positive real to any power is well-defined. (merged-interval-expt x y)) + ((and (csubtypep x (specifier-type 'rational)) + (csubtypep x (specifier-type 'rational))) + ;; A rational to a rational power can be a rational or + ;; a single-float or a complex single-float. + (specifier-type '(or rational single-float (complex single-float)))) (t ;; A real to some power. The result could be a real ;; or a complex.