Macros¶
Flint Macros¶
The file flint.h
contains various useful macros.
The macro constant FLINT_BITS
is set at compile time to be the
number of bits per limb on the machine. FLINT requires it to be either
32 or 64 bits. Other architectures are not currently supported.
The macro constant FLINT_D_BITS
is set at compile time to be the
number of bits per double on the machine or one less than the number of
bits per limb, whichever is smaller. This will have the value \(53\) or \(31\)
on currently supported architectures. Numerous internal functions using
precomputed inverses only support operands up to FLINT_D_BITS
bits,
hence the macro.
The macro FLINT_ABS(x)
returns the absolute value of \(x\)
for primitive signed numerical types. It might fail for least negative
values such as INT_MIN
and WORD_MIN
.
The macro FLINT_MIN(x, y)
returns the minimum of \(x\) and
\(y\) for primitive signed or unsigned numerical types. This macro
is only safe to use when \(x\) and \(y\) are of the same type,
to avoid problems with integer promotion.
Similar to the previous macro, FLINT_MAX(x, y)
returns the
maximum of \(x\) and \(y\).
The function FLINT_BIT_COUNT(x)
returns the number of binary bits
required to represent an ulong x
. If \(x\) is zero, returns \(0\).
Derived from this there are the two macros FLINT_FLOG2(x)
and
FLINT_CLOG2(x)
which, for any \(x \geq 1\), compute \(\lfloor \log_2 x \rfloor\)
and \(\lceil \log_2 x \rceil\).
To determine the current FLINT version a number of macros are available.
For example, if the current FLINT version is 2.4.0
then
__FLINT_VERSION
will have the value \(2\), __FLINT_MINOR
will have the value \(4\) and __FLINT_PATCHLEVEL
will have the value
\(0\).
The __FLINT_RELEASE
macro gives a single number representing the FLINT
version. For example, it will have the value 20400
for version 2.4.0
.
The FLINT_VERSION
macro is a static text string giving the version
number, e.g. “2.4” or “2.4.1”. Note that if the final digit is a zero
it is suppressed.