Fixed Point Arithmetic  0
Fixed-point math library.
Modules | Data Structures | Macros | Enumerations | Functions
Vectors

Modules

 Function-generating macros.
 
 Fxp_width
 Width based type names.
 

Data Structures

struct  mvec3
 Mixed integer/fractional 3D vector. More...
 
struct  vec3
 Single precision 3D vector. More...
 
struct  dvec3
 Double precision 3D vector. More...
 
struct  evec3
 Extended precision 3D vector. More...
 

Macros

#define VEC0   {{0},{0},{0}}
 Literal for the Zero vector. More...
 

Enumerations

enum  vec_axis { AXIS_X, AXIS_Y, AXIS_Z }
 This type is used to indicate the axis. More...
 

Functions

vec3 v_add (vec3 a, vec3 b)
 Add two single precision vectors. More...
 
vec3 v_sub (vec3 a, vec3 b)
 Substract two single precision vectors. More...
 
evec3 ev_add (evec3 a, evec3 b)
 Add two extended precision vectors. More...
 
evec3 ev_sub (evec3 a, evec3 b)
 Substract two extended precision vectors. More...
 
dvec3 dv_add (dvec3 a, dvec3 b)
 Add two double precision vectors. More...
 
dvec3 dv_addsat (dvec3 a, dvec3 b)
 Sum two double precision vectors with saturation. More...
 
dvec3 dv_sub (dvec3 a, dvec3 b)
 Substract two double precision vectors. More...
 
evec3 v_mvmul_ev (vec3 a, mvec3 b)
 Element-by-element mutiplication of a single precision vector by mixed precision, yieding extended precision. More...
 
vec3 v_imul (vec3 a, int16_t b)
 Multiply vector by integer having the same width as frac. More...
 
dvec3 dv_imul (dvec3 a, int16_t b)
 Multiply double precision vector by integer having the same width as frac. More...
 
evec3 ev_imul (evec3 a, int b)
 Multiply extended precision vector by integer. More...
 
vec3 v_idiv (vec3 a, int16_t b)
 Divide vector by integer having the same width as frac. More...
 
dvec3 dv_idiv (dvec3 a, int16_t b)
 Divide double precision vector by integer having the same width as frac. More...
 
evec3 ev_idiv (evec3 a, int16_t b)
 Divide extended precision vector by integer having the same width as frac. More...
 
dvec3 dv_shiftl (dvec3 a, int8_t b)
 Arithmetic shift components left. More...
 
dvec3 dv_shiftr (dvec3 a, int8_t b)
 Arithmetic shift components right. More...
 
vec3 v_clip (vec3 a, frac b)
 Clip components between -b and b. More...
 
evec3 v_imul_ev (vec3 a, int b)
 Multiply single precicion vector by integer, yield extended precision vector. More...
 
evec3 v_efdiv_ev (vec3 a, efrac b)
 Divide a vector by an extended frac, yield an extended vector. More...
 
vec3 v_fmul (vec3 a, frac b)
 Multiply a single precision vector by a fractional, yield single precision. More...
 
dvec3 v_fmul_dv (vec3 a, frac b)
 Multiply a single precision vector by a fractional, yield double precision. More...
 
evec3 v_mfmul_ev (vec3 a, mfrac b)
 Multiply a single precision vector by a mixed fractional, yield extended precision. More...
 
vec3 ev_to_v (evec3 a)
 Clip an extended precision vector to the range of a single precision. More...
 
evec3 v_to_ev (vec3 a)
 Extend a single precision vector. More...
 
dvec3 v_to_dv (vec3 a)
 Convert single precision vector to double precision. More...
 
vec3 dv_to_v (dvec3 a)
 Convert double precision vector to single precision, by clipping and truncating. More...
 

Detailed Description


Data Structure Documentation

◆ mvec3

struct mvec3

Mixed integer/fractional 3D vector.

Components are represented by values of type mfrac .

Definition at line 52 of file vector_types.h.

Data Fields
mfrac x
mfrac y
mfrac z

◆ vec3

struct vec3

Single precision 3D vector.

Components are represented by values of type frac .

Definition at line 61 of file vector_types.h.

Data Fields
frac x
frac y
frac z

◆ dvec3

struct dvec3

Double precision 3D vector.

Components are represented by values of type dfrac .

Definition at line 70 of file vector_types.h.

Data Fields
dfrac x
dfrac y
dfrac z

◆ evec3

struct evec3

Extended precision 3D vector.

Components are represented by values of type efrac .

Definition at line 79 of file vector_types.h.

Data Fields
efrac x
efrac y
efrac z

Macro Definition Documentation

◆ VEC0

#define VEC0   {{0},{0},{0}}

Literal for the Zero vector.

Definition at line 84 of file vector_types.h.

Enumeration Type Documentation

◆ vec_axis

enum vec_axis

This type is used to indicate the axis.

Enumerator
AXIS_X 
AXIS_Y 
AXIS_Z 

Definition at line 94 of file vector_types.h.

Function Documentation

◆ dv_add()

dvec3 dv_add ( dvec3  a,
dvec3  b 
)
inline

Add two double precision vectors.

Definition at line 69 of file vector.h.

◆ dv_addsat()

dvec3 dv_addsat ( dvec3  a,
dvec3  b 
)
inline

Sum two double precision vectors with saturation.

Yield double precision.

Definition at line 74 of file vector.h.

◆ dv_idiv()

dvec3 dv_idiv ( dvec3  a,
int16_t  b 
)
inline

Divide double precision vector by integer having the same width as frac.

Definition at line 110 of file vector.h.

◆ dv_imul()

dvec3 dv_imul ( dvec3  a,
int16_t  b 
)
inline

Multiply double precision vector by integer having the same width as frac.

Definition at line 95 of file vector.h.

◆ dv_shiftl()

dvec3 dv_shiftl ( dvec3  a,
int8_t  b 
)
inline

Arithmetic shift components left.

Definition at line 120 of file vector.h.

◆ dv_shiftr()

dvec3 dv_shiftr ( dvec3  a,
int8_t  b 
)
inline

Arithmetic shift components right.

Definition at line 125 of file vector.h.

◆ dv_sub()

dvec3 dv_sub ( dvec3  a,
dvec3  b 
)
inline

Substract two double precision vectors.

Definition at line 79 of file vector.h.

◆ dv_to_v()

vec3 dv_to_v ( dvec3  a)
inline

Convert double precision vector to single precision, by clipping and truncating.

Bug:
Does not perform convergent rounding.

Definition at line 178 of file vector.h.

◆ ev_add()

evec3 ev_add ( evec3  a,
evec3  b 
)
inline

Add two extended precision vectors.

Definition at line 59 of file vector.h.

◆ ev_idiv()

evec3 ev_idiv ( evec3  a,
int16_t  b 
)
inline

Divide extended precision vector by integer having the same width as frac.

Definition at line 115 of file vector.h.

◆ ev_imul()

evec3 ev_imul ( evec3  a,
int  b 
)
inline

Multiply extended precision vector by integer.

Definition at line 100 of file vector.h.

◆ ev_sub()

evec3 ev_sub ( evec3  a,
evec3  b 
)
inline

Substract two extended precision vectors.

Definition at line 64 of file vector.h.

◆ ev_to_v()

vec3 ev_to_v ( evec3  a)
inline

Clip an extended precision vector to the range of a single precision.

Definition at line 160 of file vector.h.

◆ v_add()

vec3 v_add ( vec3  a,
vec3  b 
)
inline

Add two single precision vectors.

Definition at line 49 of file vector.h.

◆ v_clip()

vec3 v_clip ( vec3  a,
frac  b 
)
inline

Clip components between -b and b.

Definition at line 130 of file vector.h.

◆ v_efdiv_ev()

evec3 v_efdiv_ev ( vec3  a,
efrac  b 
)
inline

Divide a vector by an extended frac, yield an extended vector.

Definition at line 140 of file vector.h.

◆ v_fmul()

vec3 v_fmul ( vec3  a,
frac  b 
)
inline

Multiply a single precision vector by a fractional, yield single precision.

Definition at line 145 of file vector.h.

◆ v_fmul_dv()

dvec3 v_fmul_dv ( vec3  a,
frac  b 
)
inline

Multiply a single precision vector by a fractional, yield double precision.

Definition at line 150 of file vector.h.

◆ v_idiv()

vec3 v_idiv ( vec3  a,
int16_t  b 
)
inline

Divide vector by integer having the same width as frac.

Definition at line 105 of file vector.h.

◆ v_imul()

vec3 v_imul ( vec3  a,
int16_t  b 
)
inline

Multiply vector by integer having the same width as frac.

Definition at line 90 of file vector.h.

◆ v_imul_ev()

evec3 v_imul_ev ( vec3  a,
int  b 
)
inline

Multiply single precicion vector by integer, yield extended precision vector.

Definition at line 135 of file vector.h.

◆ v_mfmul_ev()

evec3 v_mfmul_ev ( vec3  a,
mfrac  b 
)
inline

Multiply a single precision vector by a mixed fractional, yield extended precision.

Definition at line 155 of file vector.h.

◆ v_mvmul_ev()

evec3 v_mvmul_ev ( vec3  a,
mvec3  b 
)
inline

Element-by-element mutiplication of a single precision vector by mixed precision, yieding extended precision.

Definition at line 85 of file vector.h.

◆ v_sub()

vec3 v_sub ( vec3  a,
vec3  b 
)
inline

Substract two single precision vectors.

Definition at line 54 of file vector.h.

◆ v_to_dv()

dvec3 v_to_dv ( vec3  a)
inline

Convert single precision vector to double precision.

Definition at line 170 of file vector.h.

◆ v_to_ev()

evec3 v_to_ev ( vec3  a)
inline

Extend a single precision vector.

Definition at line 165 of file vector.h.