The
the result of truncating the result of number divided by divisor | ||
the remainder of the truncate operation |
(defun cl:ceiling (number &optional (divisor (if (integerp number) 1 1.0) divisor-p)) (let ((quotient (cond ((and (not divisor-p) (integerp number)) number) ((= number divisor) 1) (t (let ((i-quotient (/ (truncate number) (truncate divisor))) (f-quotient (/ (float number) divisor))) (if (or (= i-quotient f-quotient) ; integer result (not (plusp f-quotient))) (truncate f-quotient) (1+ (truncate f-quotient)))))))) (setq *rslt* (list quotient (- number (* quotient divisor))) cl:*multiple-values* t) quotient))
The
The quotient is directly returned by the function, while a list:
(quotient remainder)
is stored in the Nyquist/XLISP *rslt* variable and the cl:*multiple-values* is set to T to signal that Multiple Values are returned.
Examples:
(cl:ceiling 3.5) => 4 ; *rslt* => ( 4 -0.5) (cl:ceiling -3.5) => -3 ; *rslt* => (-3 -0.5)