Had the random functions swapped (fixed vs float). Fixed now.
authorjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Thu, 25 Oct 2007 14:23:40 +0000 (14:23 +0000)
committerjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Thu, 25 Oct 2007 14:23:40 +0000 (14:23 +0000)
git-svn-id: http://svn.xiph.org/trunk/speex@14048 0101bb08-14d6-0310-b084-bc0e0c8e3800

libspeex/math_approx.h
libspeex/os_support.h

index 1b84943..4f61e86 100644 (file)
 /** Generate a pseudo-random number */
 static inline spx_word16_t speex_rand(spx_word16_t std, spx_int32_t *seed)
 {
-   spx_word32_t res;
+   const unsigned int jflone = 0x3f800000;
+   const unsigned int jflmsk = 0x007fffff;
+   union {int i; float f;} ran;
    *seed = 1664525 * *seed + 1013904223;
-   res = MULT16_16(EXTRACT16(SHR32(*seed,16)),std);
-   return EXTRACT16(PSHR32(SUB32(res, SHR32(res, 3)),14));
+   ran.i = jflone | (jflmsk & *seed);
+   ran.f -= 1.5;
+   return 3.4642*std*ran.f;
 }
 
+
 #endif
 
 
@@ -117,16 +121,12 @@ static inline spx_int16_t spx_ilog4(spx_uint32_t x)
 /** Generate a pseudo-random number */
 static inline spx_word16_t speex_rand(spx_word16_t std, spx_int32_t *seed)
 {
-   const unsigned int jflone = 0x3f800000;
-   const unsigned int jflmsk = 0x007fffff;
-   union {int i; float f;} ran;
+   spx_word32_t res;
    *seed = 1664525 * *seed + 1013904223;
-   ran.i = jflone | (jflmsk & *seed);
-   ran.f -= 1.5;
-   return 3.4642*std*ran.f;
+   res = MULT16_16(EXTRACT16(SHR32(*seed,16)),std);
+   return EXTRACT16(PSHR32(SUB32(res, SHR32(res, 3)),14));
 }
 
-
 /* sqrt(x) ~= 0.22178 + 1.29227*x - 0.77070*x^2 + 0.25723*x^3 (for .25 < x < 1) */
 /*#define C0 3634
 #define C1 21173
index 8c89d4d..2552b62 100644 (file)
@@ -31,6 +31,9 @@
    POSSIBILITY OF SUCH DAMAGE.
 */
 
+#ifndef OS_SUPPORT_H
+#define OS_SUPPORT_H
+
 #include <string.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -149,3 +152,6 @@ static inline void print_vec(float *vec, int len, char *name)
    printf ("\n");
 }
 #endif
+
+#endif
+