Changeset 251


Ignore:
Timestamp:
Jan 10, 2004, 10:06:50 PM (21 years ago)
Author:
Gary Byers
Message:

Fix LCM/LCM-2 error checking.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ccl/lib/numbers.lisp

    r78 r251  
    335335
    336336(defun lcm-2 (n0 n1)
    337   (let* ((small (if (< n0 n1) n0 n1))
    338          (large (if (eq small n0) n1 n0)))
    339     (* (truncate large (gcd n0 n1)) small)))
     337  (or (typep n0 'integer) (report-bad-arg n0 'integer))
     338  (or (typep n1 'integer) (report-bad-arg n1 'integer))
     339  (locally (declare (integer n0 n1))
     340    (if (zerop n0)
     341      0
     342      (if (zerop n1)
     343        0
     344        (let* ((small (if (< n0 n1) n0 n1))
     345               (large (if (eq small n0) n1 n0)))
     346          (* (truncate large (gcd n0 n1)) small))))))
    340347
    341348(defun lcm (&lexpr numbers)
     
    347354        (if (= count 1)
    348355          (%integer-abs n0)
    349           (do* ((i 1 (1+ i)))
    350                ((= i count) n0)
    351             (declare (fixnum i))
    352             (setq n0 (lcm-2 n0 (%lexpr-ref numbers count i)))))))))
     356          (if (= count 2)
     357            (lcm-2 n0 (%lexpr-ref numbers count 1))
     358            (do* ((i 1 (1+ i)))
     359                 ((= i count) n0)
     360              (declare (fixnum i))
     361              (setq n0 (lcm-2 n0 (%lexpr-ref numbers count i))))))))))
    353362
    354363
Note: See TracChangeset for help on using the changeset viewer.