Fixed Point Arithmetic  0
Fixed-point math library.
types.h
Go to the documentation of this file.
1 
37 #ifndef FIXED_POINT_TYPES_H
38 #define FIXED_POINT_TYPES_H
39 
48 #include <stdint.h>
49 
64 typedef int16_t mfrac_base;
65 typedef int16_t frac_base;
66 typedef int32_t dfrac_base;
67 typedef int32_t efrac_base;
76 typedef struct {
78 } mfrac;
79 
86 typedef struct {
88 } frac;
89 
99 typedef struct {
101 } dfrac;
102 
112 typedef struct {
114 } efrac;
115 
119 static inline frac _frac(frac_base v)
120 {
121  frac r = {v};
122  return r;
123 }
124 
128 static inline dfrac _dfrac(dfrac_base v)
129 {
130  dfrac r = {v};
131  return r;
132 }
133 
137 static inline efrac _efrac(efrac_base v)
138 {
139  efrac r = {v};
140  return r;
141 }
142 
143 #define MFRAC_BIT (16)
144 #define FRAC_BIT (16)
145 #define DFRAC_BIT (32)
146 #define EFRAC_BIT (32)
156 typedef frac frac_s16;
157 typedef dfrac frac_s32;
175 #define MFRAC_1_V (INT16_MAX >> 8)
176 
180 #define MFRAC_minus1_V (INT16_MIN >> 8)
181 
184 #define MFRAC_MAX_V INT16_MAX
185 
188 #define MFRAC_MIN_V INT16_MIN
189 
202 #define FRAC_1_V INT16_MAX
203 
205 #define FRAC_0_5_V (-(INT16_MIN>>1))
206 
209 #define FRAC_minus1_V INT16_MIN
210 
213 #define FRAC_MAX_V INT16_MAX
214 
217 #define FRAC_MIN_V INT16_MIN
218 
227 #define DFRAC_1_V (-(INT32_MIN>>1))
228 
230 #define DFRAC_0_5_V (-(INT32_MIN>>2))
231 
237 #define DFRAC_almost1_V (-(INT32_MIN>>1)-1)
238 
240 #define DFRAC_minus1_V (INT32_MIN>>1)
241 
244 #define DFRAC_MAX_V INT32_MAX
245 
248 #define DFRAC_MIN_V INT32_MIN
249 
256 #define EFRAC_minus1_V ((efrac_base)FRAC_minus1_V)
257 #define EFRAC_1_V (-EFRAC_minus1_V)
258 
259 #define EFRAC_MAX_V INT32_MAX
260 #define EFRAC_MIN_V INT32_MIN
261 
268 static const frac FZero = {0};
269 static const dfrac DFZero = {0};
270 static const efrac EFZero = {0};
271 
288 #define F_TO_REAL(real_type, n) (((real_type)(n.v))/(-(real_type)FRAC_minus1_V))
289 
299 #define REAL_TO_F(f) (_frac(-f*FRAC_minus1_V))
300 
306 #define DF_TO_REAL(real_type, n) (((real_type)(n.v))/((real_type)DFRAC_1_V))
307 
315 #define REAL_TO_DF(f) (_dfrac(f*DFRAC_1_V))
316 
322 #define EF_TO_REAL(real_type, n) (((real_type)(n.v))/((real_type)EFRAC_1_V))
323 
331 #define REAL_TO_EF(f) (_efrac(f*EFRAC_1_V))
332 
333 #define F_TO_DOUBLE(n) F_TO_REAL(double, n)
334 #define DF_TO_DOUBLE(n) DF_TO_REAL(double, n)
335 #define EF_TO_DOUBLE(n) EF_TO_REAL(double, n)
337 #define F_TO_FLOAT(n) F_TO_REAL(float, n)
338 #define DF_TO_FLOAT(n) DF_TO_REAL(float, n)
339 #define EF_TO_FLOAT(n) EF_TO_REAL(float, n)
347 #endif /* FIXED_POINT_TYPES_H */
16 bit fractional number in Q8.8 format.
Definition: types.h:76
frac_base v
Definition: types.h:87
int32_t dfrac_base
Definition: types.h:66
int32_t efrac_base
Definition: types.h:67
32 bit fractional number in Q2.30 format.
Definition: types.h:99
dfrac_base v
Definition: types.h:100
mfrac_base v
Definition: types.h:77
16 bit fractional number in Q1.15 format.
Definition: types.h:86
int16_t frac_base
Definition: types.h:65
32 bit fractional number in Q17.15 format.
Definition: types.h:112
int16_t mfrac_base
Definition: types.h:64
efrac_base v
Definition: types.h:113