anchor.diff:  (defun phase (number)
     (atan (imagpart number) (realpart number)))
   
  +(defun fix-fdiv-quotient (quotient number divisor)
  +  (cond ((or (double-float-p number)
  +             (double-float-p divisor))
  +         (float quotient 0.0d0))
  +        ((or (single-float-p number)
  +             (single-float-p divisor))
  +         (float quotient 0.0f0))
  +        ((or (short-float-p number)
  +             (short-float-p divisor))
  +         (float quotient #.(xshort-float 0.0s0)))
  +        (t
  +         (float quotient 0.0f0))))
  +
   (defun ffloor (number &optional (divisor 1))
     (multiple-value-bind (quotient remainder)
         (floor number divisor)
  -    (values (float quotient (if (or (double-float-p number)
  -                                    (double-float-p divisor))
  -                                0.0d0
  -                                0.0f0))
  +    (values (fix-fdiv-quotient quotient number divisor)
               remainder)))
   
   (defun fceiling (number &optional (divisor 1))
     (multiple-value-bind (quotient remainder)
         (ceiling number divisor)
  -    (values (float quotient (if (or (double-float-p number)
  -                                    (double-float-p divisor))
  -                                0.0d0
  -                                0.0f0))
  +    (values (fix-fdiv-quotient quotient number divisor)
               remainder)))
   
   (defun ftruncate (number &optional (divisor 1))
     (multiple-value-bind (quotient remainder)
         (truncate number divisor)
  -    (values (float quotient (if (or (double-float-p number)
  -                                    (double-float-p divisor))
  -                                0.0d0
  -                                0.0f0))
  +    (values (fix-fdiv-quotient quotient number divisor)
               remainder)))
   
   (defun fround (number &optional (divisor 1))
     (multiple-value-bind (quotient remainder)
         (round number divisor)
  -    (values (float quotient (if (or (double-float-p number)
  -                                    (double-float-p divisor))
  -                                0.0d0
  -                                0.0f0))
  +    (values (fix-fdiv-quotient quotient number divisor)
               remainder)))
   
   ;;; INTEGER-DECODE-FLOAT from SBCL.
  
positive.code:   (%integer-as-single-float
     (dpb exp +single-float-exponent-byte+
          (dpb sig +single-float-significand-byte+
               (if (zerop sign) 0 -1)))))
  (defun double-from-bits (sign exp sig)
    (declare (type bit sign) (type (unsigned-byte 53) sig)
             (type (unsigned-byte 11) exp))
  
negative.code:             tt))))
  
  (defun atan2 (y x)
    (let ((n (cond ((> x 0) (atan (/ y x)))
                   ((and (>= y 0) (< x 0))
                    (+ (atan (/ y x)) pi))
                   ((and (< y 0) (< x 0))
                    (- (atan (/ y x)) pi))
                   ((and (> y 0) (zerop x))
                    (/ pi 2))
                   ((and (< y 0) (zerop x))
                    (- (/ pi 2)))
                   (t 0))))
      (cond ((and (floatp x) (floatp y))
             (float (float n x) y))
            ((floatp x)
             (float n x))
            ((floatp y)
             (float n y))
            (t n))))
  
  (defun two-arg-gcd (a b)
    (check-type a integer)
  