Update of /project/oct/cvsroot/oct
In directory clnet:/tmp/cvs-serv14024
Modified Files:
qd-methods.lisp
Log Message:
Forgot to handle comparisons of QD-COMPLEX and another number.
--- /project/oct/cvsroot/oct/qd-methods.lisp 2007/08/29 01:22:03 1.50
+++ /project/oct/cvsroot/oct/qd-methods.lisp 2007/08/29 14:22:42 1.51
@@ -328,9 +328,17 @@
(defmethod ,method ((a qd-real) (b real))
(,qd-fun (qd-value a) (make-qd-d (cl:float b 1d0))))
(defmethod ,method ((a real) (b qd-real))
+ ;; This is not really right if A is a rational. We're
+ ;; supposed to compare them as rationals.
(,qd-fun (make-qd-d (cl:float a 1d0)) (qd-value b)))
(defmethod ,method ((a qd-real) (b qd-real))
(,qd-fun (qd-value a) (qd-value b)))
+ (defmethod ,method ((a qd-complex) b)
+ (and (,method (realpart a) (realpart b))
+ (,method (imagpart a) (imagpart b))))
+ (defmethod ,method (a (b qd-complex))
+ (and (,method (realpart a) (realpart b))
+ (,method (imagpart a) (imagpart b))))
(defun ,op (number &rest more-numbers)
"Returns T if its arguments are in strictly increasing order, NIL otherwise."
(declare (optimize (safety 2))
@@ -345,18 +353,22 @@
(frob <=)
(frob >=))
-(macrolet ((frob (name)
- (let ((method-name (intern (concatenate 'string "Q" (symbol-name name))))
- (cl-name (intern (symbol-name name) :cl))
- (qd-name (intern (concatenate 'string (symbol-name name) "-QD"))))
- `(progn
- (defmethod ,method-name ((x number))
- (,cl-name x))
- (defmethod ,method-name ((x qd-real))
- (make-instance 'qd-real :value (,qd-name (qd-value x))))
- (declaim (inline ,name))
- (defun ,name (x)
- (,method-name x))))))
+;; Handle the special functions for a real argument. Complex args are
+;; handled elsewhere.
+(macrolet
+ ((frob (name)
+ (let ((method-name
+ (intern (concatenate 'string "Q" (symbol-name name))))
+ (cl-name (intern (symbol-name name) :cl))
+ (qd-name (intern (concatenate 'string (symbol-name name) "-QD"))))
+ `(progn
+ (defmethod ,method-name ((x number))
+ (,cl-name x))
+ (defmethod ,method-name ((x qd-real))
+ (make-instance 'qd-real :value (,qd-name (qd-value x))))
+ (declaim (inline ,name))
+ (defun ,name (x)
+ (,method-name x))))))
(frob abs)
(frob exp)
(frob sin)
@@ -496,12 +508,14 @@
(defmethod two-arg-= ((a number) (b number))
(cl:= a b))
+
(defmethod two-arg-= ((a qd-real) (b number))
- (if (realp b)
+ (if (cl:realp b)
(qd-= (qd-value a) (make-qd-d (cl:float b 1d0)))
nil))
+
(defmethod two-arg-= ((a number) (b qd-real))
- (if (realp a)
+ (if (cl:realp a)
(qd-= (make-qd-d (cl:float a 1d0)) (qd-value b))
nil))