4.3.4 Fixnums
(require racket/fixnum) | package: base |
The racket/fixnum library provides operations like fx+ that consume and produce only fixnums. The operations in this library are meant to be safe versions of unsafe operations like unsafe-fx+. These safe operations are generally no faster than using generic primitives like +.
The expected use of the racket/fixnum library is for code where the require of racket/fixnum is replaced with
(require (filtered-in (λ (name) (and (regexp-match #rx"^unsafe-fx" name) (regexp-replace #rx"unsafe-" name ""))) racket/unsafe/ops))
to drop in unsafe versions of the library. Alternately, when encountering crashes with code that uses unsafe fixnum operations, use the racket/fixnum library to help debug the problems.
4.3.4.1 Fixnum Arithmetic
procedure
a : fixnum?
procedure
a : fixnum? b : fixnum?
procedure
a : fixnum?
procedure
(fxquotient a b) → fixnum?
a : fixnum? b : fixnum?
procedure
(fxremainder a b) → fixnum?
a : fixnum? b : fixnum?
procedure
a : fixnum? b : fixnum?
procedure
a : fixnum?
Changed in version 7.0.0.13 of package base: Allow zero or more arguments for fx+ and fx* and one or more arguments for fx-.
procedure
a : fixnum?
procedure
a : fixnum?
procedure
a : fixnum?
procedure
a : fixnum?
procedure
a : fixnum? b : fixnum?
procedure
a : fixnum? b : fixnum?
Changed in version 7.0.0.13 of package base: Allow any number of arguments for fxand, fxior, and fxxor.
procedure
(fxpopcount a) → fixnum?
a : (and/c fixnum? (not/c negative?))
procedure
(fxpopcount32 a) → fixnum?
a : (and/c fixnum? (integer-in 0 #xFFFFFFFF))
procedure
(fxpopcount16 a) → fixnum?
a : (and/c fixnum? (integer-in 0 #xFFFF))
Added in version 8.5.0.7 of package base.
procedure
(fx+/wraparound a b) → fixnum?
a : fixnum? b : fixnum?
procedure
(fx-/wraparound a b) → fixnum?
a : fixnum? b : fixnum?
procedure
(fx*/wraparound a b) → fixnum?
a : fixnum? b : fixnum?
procedure
(fxlshift/wraparound a b) → fixnum?
a : fixnum? b : fixnum?
Added in version 7.9.0.6 of package base.
procedure
(fxrshift/logical a b) → fixnum?
a : fixnum? b : fixnum?
> (fxrshift/logical 128 2) 32
> (fxrshift/logical 255 4) 15
> (= (fxrshift/logical -1 1) (most-positive-fixnum)) #t
Added in version 8.8.0.5 of package base.
procedure
a : fixnum? b : fixnum?
procedure
a : fixnum? b : fixnum?
procedure
a : fixnum? b : fixnum?
procedure
a : fixnum? b : fixnum?
procedure
a : fixnum? b : fixnum?
procedure
a : fixnum? b : fixnum?
procedure
a : fixnum? b : fixnum?
Changed in version 7.0.0.13 of package base: Allow one argument, in addition to allowing two or more.
The fx->fl function is the same as exact->inexact or ->fl constrained to a fixnum argument.
The fl->fx function is the same as truncate followed by inexact->exact or fl->exact-integer constrained to returning a fixnum. If the truncated flonum does not fit into a fixnum, the exn:fail:contract exception is raised.
Changed in version 7.7.0.8 of package base: Changed fl->fx to truncate.
procedure
v : any/c
Added in version 7.3.0.11 of package base.
4.3.4.2 Fixnum Vectors
A fxvector is like a vector, but it holds only fixnums. The only advantage of a fxvector over a vector is that a shared version can be created with functions like shared-fxvector.
Two fxvectors are equal? if they have the same length, and if the values in corresponding slots of the fxvectors are equal?.
A printed fxvector starts with #fx(, optionally with a number between the #fx and (. See Reading Vectors for information on reading fxvectors and Printing Vectors for information on printing fxvectors.
> (fxvector 2 3 4 5) (fxvector 2 3 4 5)
procedure
(make-fxvector size [x]) → fxvector?
size : exact-nonnegative-integer? x : fixnum? = 0
> (make-fxvector 4 3) (fxvector 3 3 3 3)
procedure
vec : fxvector?
procedure
(fxvector-ref vec pos) → fixnum?
vec : fxvector? pos : exact-nonnegative-integer?
procedure
(fxvector-set! vec pos x) → fixnum?
vec : fxvector? pos : exact-nonnegative-integer? x : fixnum?
procedure
(fxvector-copy vec [start end]) → fxvector?
vec : fxvector? start : exact-nonnegative-integer? = 0 end : exact-nonnegative-integer? = (vector-length v)
procedure
(in-fxvector vec [start stop step]) → sequence?
vec : fxvector? start : exact-nonnegative-integer? = 0 stop : (or/c exact-integer? #f) = #f step : (and/c exact-integer? (not/c zero?)) = 1
The optional arguments start, stop, and step are as in in-vector.
An in-fxvector application can provide better performance for fxvector iteration when it appears directly in a for clause.
syntax
(for/fxvector maybe-length (for-clause ...) body ...)
syntax
(for*/fxvector maybe-length (for-clause ...) body ...)
maybe-length =
| #:length length-expr | #:length length-expr #:fill fill-expr
length-expr : exact-nonnegative-integer?
fill-expr : fixnum?
procedure
(shared-fxvector x ...) → fxvector?
x : fixnum?
> (shared-fxvector 2 3 4 5) (fxvector 2 3 4 5)
procedure
(make-shared-fxvector size [x]) → fxvector?
size : exact-nonnegative-integer? x : fixnum? = 0
> (make-shared-fxvector 4 3) (fxvector 3 3 3 3)
4.3.4.3 Fixnum Range
procedure
procedure
Added in version 8.1.0.7 of package base.