static int int_pow(int i, int *exp_ptr)

{

    int e, er, eq, j;

    int a, a1;

    

    /* renormalize */

    a = i;

    e = POW_FRAC_BITS;

    while (a < (1 << (POW_FRAC_BITS - 1))) {

        a = a << 1;

        e--;

    }

    a -= (1 << POW_FRAC_BITS);

    a1 = 0;

    for(j = DEV_ORDER - 1; j >= 0; j--)

        a1 = POW_MULL(a, dev_4_3_coefs[j] + a1);

    a = (1 << POW_FRAC_BITS) + a1;

    /* exponent compute (exact) */

    e = e * 4;

    er = e % 3;

    eq = e / 3;

    a = POW_MULL(a, pow_mult3[er]);

    while (a >= 2 * POW_FRAC_ONE) {

        a = a >> 1;

        eq++;

    }

    /* convert to float */

    while (a < POW_FRAC_ONE) {

        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;

    return a;

}

static int int_pow(int i, int *exp_ptr)

{

    int e, er, eq, j;

    int a, a1;

    

    

    a = i;

    e = POW_FRAC_BITS;

    while (a < (1 << (POW_FRAC_BITS - 1))) {

        a = a << 1;

        e--;

    }

    a -= (1 << POW_FRAC_BITS);

    a1 = 0;

    for(j = DEV_ORDER - 1; j >= 0; j--)

        a1 = POW_MULL(a, dev_4_3_coefs[j] + a1);

    a = (1 << POW_FRAC_BITS) + a1;

    

    e = e * 4;

    er = e % 3;

    eq = e / 3;

    a = POW_MULL(a, pow_mult3[er]);

    while (a >= 2 * POW_FRAC_ONE) {

        a = a >> 1;

        eq++;

    }

    

    while (a < POW_FRAC_ONE) {

        a = a << 1;

        eq--;

    }

    

#if (POW_FRAC_BITS - 1) > FRAC_BITS

    a = (a + (1 << (POW_FRAC_BITS - FRAC_BITS - 1))) >> (POW_FRAC_BITS - FRAC_BITS);

    

    if (a >= 2 * (1 << FRAC_BITS)) {

        a = a >> 1;

        eq++;

    }

#endif

    *exp_ptr = eq;

    return a;

}

#if (POW_FRAC_BITS - 1) > FRAC_BITS #endif
static int FUNC_0(int VAR_0, int *VAR_1)

{

    int VAR_2, VAR_3, VAR_4, VAR_5;

    int VAR_6, VAR_7;

    

    

    VAR_6 = VAR_0;

    VAR_2 = POW_FRAC_BITS;

    while (VAR_6 < (1 << (POW_FRAC_BITS - 1))) {

        VAR_6 = VAR_6 << 1;

        VAR_2--;

    }

    VAR_6 -= (1 << POW_FRAC_BITS);

    VAR_7 = 0;

    for(VAR_5 = DEV_ORDER - 1; VAR_5 >= 0; VAR_5--)

        VAR_7 = POW_MULL(VAR_6, dev_4_3_coefs[VAR_5] + VAR_7);

    VAR_6 = (1 << POW_FRAC_BITS) + VAR_7;

    

    VAR_2 = VAR_2 * 4;

    VAR_3 = VAR_2 % 3;

    VAR_4 = VAR_2 / 3;

    VAR_6 = POW_MULL(VAR_6, pow_mult3[VAR_3]);

    while (VAR_6 >= 2 * POW_FRAC_ONE) {

        VAR_6 = VAR_6 >> 1;

        VAR_4++;

    }

    

    while (VAR_6 < POW_FRAC_ONE) {

        VAR_6 = VAR_6 << 1;

        VAR_4--;

    }

    

#if (POW_FRAC_BITS - 1) > FRAC_BITS

    VAR_6 = (VAR_6 + (1 << (POW_FRAC_BITS - FRAC_BITS - 1))) >> (POW_FRAC_BITS - FRAC_BITS);

    

    if (VAR_6 >= 2 * (1 << FRAC_BITS)) {

        VAR_6 = VAR_6 >> 1;

        VAR_4++;

    }

#endif

    *VAR_1 = VAR_4;

    return VAR_6;

}

static int FUNC_0(int VAR_0, int *VAR_1)
{ int VAR_2, VAR_3, VAR_4, VAR_5; int VAR_6, VAR_7; VAR_6 = VAR_0; VAR_2 = POW_FRAC_BITS; while (VAR_6 < (1 << (POW_FRAC_BITS - 1))) { VAR_6 = VAR_6 << 1; VAR_2--; } VAR_6 -= (1 << POW_FRAC_BITS); VAR_7 = 0; for(VAR_5 = DEV_ORDER - 1; VAR_5 >= 0; VAR_5--) VAR_7 = POW_MULL(VAR_6, dev_4_3_coefs[VAR_5] + VAR_7); VAR_6 = (1 << POW_FRAC_BITS) + VAR_7; VAR_2 = VAR_2 * 4; VAR_3 = VAR_2 % 3; VAR_4 = VAR_2 / 3; VAR_6 = POW_MULL(VAR_6, pow_mult3[VAR_3]); while (VAR_6 >= 2 * POW_FRAC_ONE) { VAR_6 = VAR_6 >> 1; VAR_4++; } while (VAR_6 < POW_FRAC_ONE) { VAR_6 = VAR_6 << 1; VAR_4--; } #if (POW_FRAC_BITS - 1) > FRAC_BITS
VAR_6 = (VAR_6 + (1 << (POW_FRAC_BITS - FRAC_BITS - 1))) >> (POW_FRAC_BITS - FRAC_BITS); if (VAR_6 >= 2 * (1 << FRAC_BITS)) { VAR_6 = VAR_6 >> 1; VAR_4++; } #endif
*VAR_1 = VAR_4; return VAR_6; }