Q_QADDI
, Q_QDIVI
,
Q_QMULI
, Q_QSUBI
,
Q_QFRACI
, Q_QCPYVALI
— fixed-point math functions which apply integers to
a Q number
#include
<sys/qmath.h>
int
Q_QADDI
(QTYPE
*a, ITYPE b);
int
Q_QDIVI
(QTYPE
*a, ITYPE b);
int
Q_QMULI
(QTYPE
*a, ITYPE b);
int
Q_QSUBI
(QTYPE
*a, ITYPE b);
int
Q_QFRACI
(QTYPE
*q, ITYPE n,
ITYPE d);
int
Q_QCPYVALI
(QTYPE
*q, ITYPE i);
The
Q_QADDI
(),
Q_QDIVI
(),
Q_QMULI
()
and
Q_QSUBI
()
functions add, divide, multiply or subtract b
to/by/from a respectively, storing the result in
a.
The
Q_QFRACI
()
function computes the fraction n divided by
d and stores the fixed-point result in
q.
The
Q_QCPYVALI
()
function overwrites q's integer and fractional bits
with the Q representation of integer value i.
All of those functions operate on the following data types:
s8q_t, u8q_t,
s16q_t, u16q_t,
s32q_t, u32q_t,
s64q_t, and u64q_t, which are
referred to generically as QTYPE. The
ITYPE refers to the
stdint(7)
integer types.
For more details, see
qmath(3).
Q_QADDI
(),
Q_QDIVI
(), Q_QMULI
(),
Q_QSUBI
(), Q_QFRACI
() and
Q_QCPYVALI
() functions return 0 on success, or an
errno on failure. EINVAL
is returned for
divide-by-zero. EOVERFLOW
and
ERANGE
are returned for overflow and underflow
respectively.
The
qmath(3)
functions first appeared in FreeBSD 13.0.