Update the log2 approximation to accomodate the increased bit precision from bd0610d2...
authorTimothy B. Terriberry <tterribe@xiph.org>
Tue, 16 Mar 2010 03:49:28 +0000 (23:49 -0400)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Tue, 16 Mar 2010 04:17:38 +0000 (00:17 -0400)
libcelt/mathops.h

index 68da67a..29ed4ea 100644 (file)
@@ -306,15 +306,14 @@ static inline celt_word16 celt_log2(celt_word32 x)
 {
    int i;
    celt_word16 n, frac;
-   /*-0.41446   0.96093  -0.33981   0.15600 */
-   /* -0.4144541824871411+32/16384, 0.9590923197873218, -0.3395129038105771,
-       0.16541096501128538 */
-   const celt_word16 C[4] = {-6758, 15715, -5563, 2708};
+   /* -0.41509302963303146, 0.9609890551383969, -0.31836011537636605,
+       0.15530808010959576, -0.08556153059057618 */
+   const celt_word16 C[5] = {-6801+(1<<13-DB_SHIFT), 15746, -5217, 2545, -1401};
    if (x==0)
       return -32767;
    i = celt_ilog2(x);
    n = VSHR32(x,i-15)-32768-16384;
-   frac = ADD16(C[0], MULT16_16_Q15(n, ADD16(C[1], MULT16_16_Q15(n, ADD16(C[2], MULT16_16_Q15(n, (C[3])))))));
+   frac = ADD16(C[0], MULT16_16_Q15(n, ADD16(C[1], MULT16_16_Q15(n, ADD16(C[2], MULT16_16_Q15(n, ADD16(C[3], MULT16_16_Q15(n, C[4]))))))));
    return SHL16(i-13,DB_SHIFT)+SHR16(frac,14-DB_SHIFT);
 }