#define FP_BITS (12) #define FP_MASK ((1 << FP_BITS) - 1) #define FP_ONE (1 << FP_BITS) #define FP_TWO (2 << FP_BITS) #define FP_HALF (1 << (FP_BITS - 1)) #define FP_LN2 ( 45426 >> (16 - FP_BITS)) #define FP_LN2_INV ( 94548 >> (16 - FP_BITS)) #define FP_EXP_ZERO ( 10922 >> (16 - FP_BITS)) #define FP_EXP_ONE ( -182 >> (16 - FP_BITS)) #define FP_EXP_TWO ( 4 >> (16 - FP_BITS)) #define FP_INF (0x7fffffff) #define FP_LN10 (150902 >> (16 - FP_BITS)) #define FP_MAX_DIGITS (4) #define FP_MAX_DIGITS_INT (10000) // #define FP_FAST_MUL_DIV // #ifdef FP_FAST_MUL_DIV /* These macros can easily overflow, but they are good enough for our uses, * and saves some code. */ #define fp_mul(x, y) (((x) * (y)) >> FP_BITS) #define fp_div(x, y) (((x) << FP_BITS) / (y)) #define abs(x) (((x)<0)?((x)*-1):(x)) float spx_exp(float xf){ long x=((long)xf)<> (-k >> FP_BITS); } else { k = FP_ONE << (k >> FP_BITS); } return (fp_mul(k, xp)>>FP_BITS); }