77#include "jasper/jas_config.h"
89#ifdef JAS_ENABLE_32BIT
90typedef int_least32_t jpc_fix_t;
92typedef int_fast32_t jpc_fix_t;
98typedef int_fast64_t jpc_fix_big_t;
101#define JPC_FIX_FRACBITS 13
110#define JPC_FIX_ZERO JAS_FIX_ZERO(jpc_fix_t, JPC_FIX_FRACBITS)
111#define JPC_FIX_ONE JAS_FIX_ONE(jpc_fix_t, JPC_FIX_FRACBITS)
112#define JPC_FIX_HALF JAS_FIX_HALF(jpc_fix_t, JPC_FIX_FRACBITS)
115static inline jpc_fix_t jpc_inttofix(
int x)
117 return JAS_INTTOFIX(jpc_fix_t, JPC_FIX_FRACBITS, x);
121static inline int jpc_fixtoint(jpc_fix_t x)
123 return JAS_FIXTOINT(jpc_fix_t, JPC_FIX_FRACBITS, x);
127static inline double jpc_fixtodbl(jpc_fix_t x)
129 return JAS_FIXTODBL(jpc_fix_t, JPC_FIX_FRACBITS, x);
133static inline jpc_fix_t jpc_dbltofix(
double x)
135 return JAS_DBLTOFIX(jpc_fix_t, JPC_FIX_FRACBITS, x);
139static inline jpc_fix_t jpc_fix_add(jpc_fix_t x, jpc_fix_t y)
141 return JAS_FIX_ADD(jpc_fix_t, JPC_FIX_FRACBITS, x, y);
145static inline jpc_fix_t jpc_fix_sub(jpc_fix_t x, jpc_fix_t y)
147 return JAS_FIX_SUB(jpc_fix_t, JPC_FIX_FRACBITS, x, y);
151static inline jpc_fix_t jpc_fix_mul(jpc_fix_big_t x, jpc_fix_big_t y)
153 return JAS_FIX_MUL(jpc_fix_t, JPC_FIX_FRACBITS, jpc_fix_big_t, x, y);
157static inline jpc_fix_big_t jpc_fix_mulbyint(jpc_fix_big_t x,
int y)
159 return JAS_FIX_MUL(jpc_fix_t, JPC_FIX_FRACBITS, jpc_fix_big_t, x, y);
163static inline jpc_fix_t jpc_fix_div(jpc_fix_big_t x, jpc_fix_t y)
165 return JAS_FIX_DIV(jpc_fix_t, JPC_FIX_FRACBITS, jpc_fix_big_t, x, y);
169static inline jpc_fix_t jpc_fix_neg(jpc_fix_t x)
171 return JAS_FIX_NEG(jpc_fix_t, JPC_FIX_FRACBITS, x);
177#ifdef JAS_ENABLE_32BIT
178#define jpc_fix_asl jas_least32_asl
179#define jpc_fix_asr jas_least32_asr
181#define jpc_fix_asl jas_fast32_asl
182#define jpc_fix_asr jas_fast32_asr
185#define jpc_fix_pluseq(x, y) JAS_FIX_PLUSEQ(jpc_fix_t, JPC_FIX_FRACBITS, x, y)
186#define jpc_fix_minuseq(x, y) JAS_FIX_MINUSEQ(jpc_fix_t, JPC_FIX_FRACBITS, x, y)
187#define jpc_fix_muleq(x, y) \
188 JAS_FIX_MULEQ(jpc_fix_t, JPC_FIX_FRACBITS, jpc_fix_big_t, x, y)
191static inline jpc_fix_t jpc_fix_abs(jpc_fix_t x)
193 return JAS_FIX_ABS(jpc_fix_t, JPC_FIX_FRACBITS, x);
197static inline bool jpc_fix_isint(jpc_fix_t x)
199 return JAS_FIX_ISINT(jpc_fix_t, JPC_FIX_FRACBITS, x);
203static inline int jpc_fix_sgn(jpc_fix_t x)
205 return JAS_FIX_SGN(jpc_fix_t, JPC_FIX_FRACBITS, x);
209static inline jpc_fix_t jpc_fix_round(jpc_fix_t x)
211 return JAS_FIX_ROUND(jpc_fix_t, JPC_FIX_FRACBITS, x);
215static inline jpc_fix_t jpc_fix_floor(jpc_fix_t x)
217 return JAS_FIX_FLOOR(jpc_fix_t, JPC_FIX_FRACBITS, x);
226static inline jpc_fix_t jpc_fix_add3(jpc_fix_t x, jpc_fix_t y, jpc_fix_t z)
228 return jpc_fix_add(jpc_fix_add(x, y), z);
JasPer Fixed-Point Number Class.