52 #include "../fixed_point.h" 259 frac r = { a.
v * b };
274 return (((int64_t)b)*a.
v) >> 15;
333 frac r = { a.
v / b };
410 if (x.
v >= DFRAC_1_V)
412 else if ( x.
v < DFRAC_minus1_V)
450 efrac r = {new_dividend/divisor.
v};
462 frac r = { (x.
v > FRAC_minus1_V)?
463 ((x.
v < FRAC_1_V)? x.
v : FRAC_1_V)
481 frac r = {(x.
v > -limit.
v)? ((x.
v < limit.
v)? x.
v : limit.
v) : -limit.
v};
497 if (x1.
v > 0 && x2.
v > 0)
498 r.
v = ((result < x1.
v) ? DFRAC_MAX_V : result);
499 else if (x1.
v < 0 && x2.
v < 0)
500 r.
v = ((result > x1.
v) ? DFRAC_MIN_V : result);
efrac f_to_ef(frac x)
Extend a single precision fractional to an extended-fractional.
dfrac df_shiftr(dfrac a, int16_t b)
Arithmetic shift right a double precision fractional.
bool f_eq(frac a, frac b)
Equality comparison - single precision.
bool f_lt(frac a, frac b)
Less-than comparison - single precision.
efrac f_imul_ef(frac a, int16_t b)
Multiply single precision by integer, yield extended precision.
16 bit fractional number in Q8.8 format.
dfrac df_imul(dfrac a, int16_t b)
Multiply double precision by integer, yield double precision.
frac f_imul(frac a, int16_t b)
Multiply single precision by integer, yield single precision.
frac f_sub(frac a, frac b)
Substract two single precision fractional numbers - may overflow.
frac df_to_f(dfrac x)
Truncate to single precision.
dfrac f_to_df(frac x)
Extend a single precision number to double precision.
bool df_ge(dfrac a, dfrac b)
Greater or equal comparison - double precision.
bool df_lt(dfrac a, dfrac b)
Less-than comparison - double precision.
dfrac df_shiftl(dfrac a, int16_t b)
Arithmetic shift left a double precision fractional.
frac f_idiv(frac a, int16_t b)
Divide single precision by integer, yield single precision.
efrac ef_neg(efrac a)
Negate extended precision fractional.
efrac ef_idiv(efrac a, int16_t b)
Divide extended precision by integer, yield extended precision.
frac f_neg(frac a)
Negate single precision fractional.
dfrac f_macs_df(frac x, frac y, dfrac z)
Multiply-accumulate with saturation.
dfrac df_sub(dfrac a, dfrac b)
Substract two double precision fractional numbers - may overflow.
bool df_gt(dfrac a, dfrac b)
Greater-than comparison - double precision.
dfrac df_neg(dfrac a)
Negate double precision fractional.
efrac ef_f_add(efrac a, frac b)
Add a single precision fractional to an extended precision fractional.
dfrac df_idiv(dfrac a, int16_t b)
Divide double precision by integer, yield double precision.
efrac ef_sub(efrac a, efrac b)
Substract two extended precision fractional numbers - may overflow.
32 bit fractional number in Q2.30 format.
frac f_clip(frac x, frac limit)
Clip a number to lie between -limit and limit.
dfrac f_mul_df(frac a, frac b)
Multiply single precision, yield double precision.
frac ef_to_f(efrac x)
Saturate an extended fractional to yield a fractional.
bool f_le(frac a, frac b)
Less or equal comparison - single precision.
frac f_add(frac a, frac b)
Add two single precision fractional numbers - may overflow.
bool df_eq(dfrac a, dfrac b)
Equality comparison - double precision.
16 bit fractional number in Q1.15 format.
efrac ef_add(efrac a, efrac b)
Add two extended precision fractional numbers - may overflow.
bool df_le(dfrac a, dfrac b)
Less or equal comparison - double precision.
bool f_gt(frac a, frac b)
Greater-than comparison - single precision.
efrac f_ef_div(frac dividend, efrac divisor)
Divide a frac by an efrac and return an efrac.
int f_imul_i(frac a, int b)
Multiply single precision by integer, yield integer.
dfrac df_add(dfrac a, dfrac b)
Add two double precision fractional numbers - may overflow.
frac f_mul(frac a, frac b)
Multiply single precision, yield single precision.
dfrac df_addsat(dfrac x1, dfrac x2)
Add with saturation.
efrac ef_imul(efrac a, int16_t b)
Multiply extended precision by integer, yield extended precision.
32 bit fractional number in Q17.15 format.
efrac f_mf_mul_ef(frac a, mfrac b)
Multiply single precision by mixed fractional, yield extended precision,.
bool f_ge(frac a, frac b)
Greater or equal comparison - single precision.