3.2 Numeric Types
value
_sint8 : ctype? _uint8 : ctype? _int16 : ctype? _sint16 : ctype? _uint16 : ctype? _int32 : ctype? _sint32 : ctype? _uint32 : ctype? _int64 : ctype? _sint64 : ctype? _uint64 : ctype?
The basic integer types at various sizes. The s or
u prefix specifies a signed or an unsigned integer,
respectively; the ones with no prefix are signed.
The _sbyte and _ubyte types are aliases
for _sint8 and _uint8, respectively.
The _byte type is like _ubyte, but adds
256 to a negative Racket value that would work as a _sbyte
(i.e., it casts signed bytes to unsigned bytes).
The _sword and _uword types are aliases
for _sint16 and _uint16, respectively.
The _word type is like _uword, but coerces
negative values in the same way as _byte.
value
_sshort : ctype? _ushort : ctype? _int : ctype? _sint : ctype? _uint : ctype? _long : ctype? _slong : ctype? _ulong : ctype? _llong : ctype? _sllong : ctype? _ullong : ctype? _intptr : ctype? _sintptr : ctype? _uintptr : ctype?
Aliases for basic integer types. The _short aliases
correspond to _int16. The _int aliases correspond to
_int32. The _long aliases correspond to either
_int32 or _int64, depending on the platform. Similarly,
the _intptr aliases correspond to either
_int32 or _int64, depending on the platform.
For cases where speed matters and where you know that the integer is
small enough, the types _fixnum and _ufixnum are
similar to _intptr and _uintptr but assume that the
quantities fit in Racket’s immediate integers (i.e., not bignums).
Similar to _fixnum/_ufixnum, but based on
_int/_uint instead of
_intptr/_uintptr, and coercions from C are checked
to be in range.
The _float and _double types represent the
corresponding C types. Both single- and double-precision Racket
numbers are accepted for conversion via both _float and
_double, while both _float and _double
coerce C values to double-precision Racket numbers.
The type _double*
coerces any Racket real number to a C double.