a = a << 1;
eq--;
}
+ /* now POW_FRAC_ONE <= a < 2 * POW_FRAC_ONE */
+#if (POW_FRAC_BITS - 1) > FRAC_BITS
+ a = (a + (1 << (POW_FRAC_BITS - FRAC_BITS - 1))) >> (POW_FRAC_BITS - FRAC_BITS);
+ /* correct overflow */
+ if (a >= 2 * (1 << FRAC_BITS)) {
+ a = a >> 1;
+ eq++;
+ }
+#endif
*exp_ptr = eq;
-#if POW_FRAC_BITS == FRAC_BITS
return a;
-#else
- return (a + (1 << (POW_FRAC_BITS - FRAC_BITS - 1))) >> (POW_FRAC_BITS - FRAC_BITS);
-#endif
}
static int decode_init(AVCodecContext * avctx)
for(i=1;i<TABLE_4_3_SIZE;i++) {
int e, m;
m = int_pow(i, &e);
-#if FRAC_BITS <= 15
- if ((unsigned short)m != m)
- m = 65535;
-#endif
#if 0
/* test code */
{
fm = frexp(f, &e1);
m1 = FIXR(2 * fm);
#if FRAC_BITS <= 15
- if ((unsigned short)m1 != m1)
- m1 = 65535;
+ if ((unsigned short)m1 != m1) {
+ m1 = m1 >> 1;
+ e1++;
+ }
#endif
e1--;
if (m != m1 || e != e1) {
#endif
/* normalized to FRAC_BITS */
table_4_3_value[i] = m;
- table_4_3_exp[i] = e - 1;
+ table_4_3_exp[i] = e;
}
-
for(i=0;i<7;i++) {
float f;