1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
; Part of Scheme 48 1.9. See file COPYING for notices and license.
; Authors: Richard Kelsey, Jonathan Rees, Martin Gasbichler, Mike Sperber
; Operations on integers.
; These expect their arguments to be integers.
(define integer-add bignum-add)
(define integer-subtract bignum-subtract)
(define integer-multiply bignum-multiply)
(define integer-remainder bignum-remainder)
(define integer-quotient bignum-quotient)
(define integer-divide bignum-divide)
(define integer-abs bignum-abs)
; Fixnums and bignums are disjoint.
(define (integer= x y)
(cond ((and (fixnum? x)
(fixnum? y))
(fixnum= x y))
((and (bignum? x)
(bignum? y))
(bignum= x y))
(else
#f)))
; Positive bignums are greater than all fixnums, negative bignums are less
; than all fixnums.
(define (integer< x y)
(cond ((fixnum? x)
(if (fixnum? y)
(fixnum< x y)
(bignum-positive? y)))
((fixnum? y)
(not (bignum-positive? x)))
(else
(bignum< x y))))
(define (integer<= x y)
(not (integer< y x)))
(define (integer> x y)
(integer< y x))
(define (integer>= x y)
(not (integer< x y)))
(define integer-arithmetic-shift bignum-arithmetic-shift)
(define integer-bitwise-not bignum-bitwise-not)
(define integer-bit-count bignum-bit-count)
(define integer-bitwise-and bignum-bitwise-and)
(define integer-bitwise-ior bignum-bitwise-ior)
(define integer-bitwise-xor bignum-bitwise-xor)
(define (enter-integer x key)
(if (or (too-big-for-fixnum? x)
(too-small-for-fixnum? x))
(long->bignum x key)
(enter-fixnum x)))
(define (enter-unsigned-integer x key)
(if (unsigned-too-big-for-fixnum? x)
(unsigned-long->bignum x key)
(enter-fixnum (unsigned->integer x))))
(define long-as-integer-size (bignum-bits-to-size 32))
|