Marc:
There seems to be a disconnect between the documentation and the implementation of the following procedures in gambc40b15. Perhaps I should document more of the low-level details of the bignum operations so people could contribute faster implementation of some of the bitwise operations.
BTW, do you happen to have the implementation of the bitset operations (rather than bitwise operations, including destructive operations) I sent you in gambc40a4.tar.gz on December 16, 2000? I can't seem to find it on my machine. ;-)
Brad
procedure: any-bits-set? n1 n2
This procedure returns a boolean indicating if the bitwise and of n1 and n2 is different from zero or not. This procedure is implemented more efficiently than the naive definition:
(define (any-bits-set? n1 n2) (not (zero? (bitwise-and n1 n2))))
(define-prim (##any-bits-set? x y) (cond ((##not (macro-exact-int? x)) (##fail-check-exact-integer 1 any-bits-set? x y)) ((##not (macro-exact-int? y)) (##fail-check-exact-integer 2 any-bits-set? x y)) (else (##not (##eq? (##bitwise-and x y) 0)))))
procedure: all-bits-set? n1 n2
This procedure returns a boolean indicating if the bitwise and of n1 and n2 is equal to n1 or not. This procedure is implemented more efficiently than the naive definition:
(define (all-bits-set? n1 n2) (= n1 (bitwise-and n1 n2)))
(define-prim (##all-bits-set? x y) (cond ((##not (macro-exact-int? x)) (##fail-check-exact-integer 1 all-bits-set? x y)) ((##not (macro-exact-int? y)) (##fail-check-exact-integer 2 all-bits-set? x y)) (else (##= x (##bitwise-and x y)))))
Afficher les réponses par date