* Fix bug reported by Paul Dietz: (GCD 0 X) returned X instead
of (ABS X).
** (FLOAT X) for X of type DOUBLE-FLOAT now returns X in all
circumstances.
** optimizer for (EXPT X 0) did not work for X not of type FLOAT.
+ ** (GCD 0 <negative-integer>) returned <negative-integer>.
planned incompatible changes in 0.8.x:
* (not done yet, but planned:) When the profiling interface settles
;;; of 0 before the dispatch so that the bignum code doesn't have to worry
;;; about "small bignum" zeros.
(defun two-arg-gcd (u v)
- (cond ((eql u 0) v)
- ((eql v 0) u)
+ (cond ((eql u 0) (abs v))
+ ((eql v 0) (abs u))
(t
(number-dispatch ((u integer) (v integer))
((fixnum fixnum)
(= (funcall fn 2) x2)
(= (funcall fn 3) x3))
(error "bad results for ~D" x)))))
+
+;;; (GCD 0 x) must return (abs x)
+(dolist (x (list -10 (* 3 most-negative-fixnum)))
+ (assert (= (gcd 0 x) (abs x))))
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.8.3.32"
+"0.8.3.33"