Changeset 287
- Timestamp:
- Jan 13, 2004, 5:09:32 PM (21 years ago)
- File:
-
- 1 edited
-
trunk/ccl/level-0/l0-numbers.lisp (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ccl/level-0/l0-numbers.lisp
r78 r287 783 783 (rational 784 784 (if (minusp number) 785 (% double-float pi) ; is it (will it be) always double float?785 (%short-float pi) 786 786 0.0f0)) 787 787 (double-float … … 1382 1382 (number-case number 1383 1383 (complex (%imagpart number)) 1384 (float ( float 0.0 number))1384 (float (* 0 number)) 1385 1385 (rational 0))) 1386 1386 … … 1517 1517 (defun ash (integer count) 1518 1518 "Shifts integer left by count places preserving sign. - count shifts right." 1519 ( number-case integer1520 (fixnum1521 (cond ((eql 0 integer)1522 0)1523 (t (number-case count 1524 (fixnum 1525 (if (eql count 0)1526 integer1527 (let ((length (integer-length (the fixnum integer))))1528 (declare (fixnum length count))1529 (cond ((and (plusp count)1530 (> (+ length count)1531 (- 31 ppc32::fixnumshift)))1532 (with-small-bignum-buffers ((bi integer))1533 (bignum-ashift-left bi count)))1534 ((and (minusp count) (< count -31))1535 (if (minusp integer) -1 0))1536 (t (%iash (the fixnum integer) count))))))1537 (bignum1538 (if (minusp count)1539 (if (minusp integer) -1 0)1540 (error "Count ~s too large for ASH" count)))))))1519 (etypecase integer 1520 (fixnum 1521 (etypecase count 1522 (fixnum 1523 (if (eql integer 0) 1524 0 1525 (if (eql count 0) 1526 integer 1527 (let ((length (integer-length (the fixnum integer)))) 1528 (declare (fixnum length count)) 1529 (cond ((and (plusp count) 1530 (> (+ length count) 1531 (- 31 ppc32::fixnumshift))) 1532 (with-small-bignum-buffers ((bi integer)) 1533 (bignum-ashift-left bi count))) 1534 ((and (minusp count) (< count -31)) 1535 (if (minusp integer) -1 0)) 1536 (t (%iash (the fixnum integer) count))))))) 1537 (bignum 1538 (if (minusp count) 1539 (if (minusp integer) -1 0) 1540 (error "Count ~s too large for ASH" count))))) 1541 1541 (bignum 1542 ( number-case count1542 (etypecase count 1543 1543 (fixnum 1544 1544 (if (eql count 0) … … 1587 1587 (defun random (number &optional (state *random-state*)) 1588 1588 (if (not (typep state 'random-state)) (report-bad-arg state 'random-state)) 1589 ; below doesn't boot 1590 ;(setq state (require-type (or state *random-state*) 'random-state)) 1591 (if (eql number 0) 1592 0 1593 (cond 1594 ((and (fixnump number) (>= (the fixnum number) 0)) 1589 (cond 1590 ((and (fixnump number) (> (the fixnum number) 0)) 1595 1591 (locally (declare (fixnum number)) 1596 1592 (if (< number 65536) 1597 1593 (mod (%next-random-seed state) number) 1598 1594 (%bignum-random number state)))) 1599 ((and (typep number 'double-float) (> =(the double-float number) 0.0))1595 ((and (typep number 'double-float) (> (the double-float number) 0.0)) 1600 1596 (%float-random number state)) 1601 ((and (typep number 'short-float) (> =(the short-float number) 0.0s0))1597 ((and (typep number 'short-float) (> (the short-float number) 0.0s0)) 1602 1598 (%float-random number state)) 1603 ((and (bignump number) (> =number 0))1599 ((and (bignump number) (> number 0)) 1604 1600 (%bignum-random number state)) 1605 (t (report-bad-arg number '(or (integer 0) (float0.0)))))))1601 (t (report-bad-arg number '(or (integer (0)) (float (0.0))))))) 1606 1602 1607 1603 (defun %bignum-random (number &optional state) … … 1627 1623 (incf index 2)) 1628 1624 ; The bignum code expects normalized bignums 1629 (mod dividend number))) 1625 (let* ((result (mod dividend number))) 1626 (if (eq dividend result) 1627 (copy-uvector result) 1628 result)))) 1630 1629 1631 1630 (defun %float-random (number state)
Note:
See TracChangeset
for help on using the changeset viewer.
