fix float rounding issue in sincos index calculation

pull/19/head
Oskar Weigl 7 years ago committed by Martin Günther
parent da079620dc
commit dd4779520f

@ -93,8 +93,14 @@ float32_t arm_cos_f32(
in = in - (float32_t) n; in = in - (float32_t) n;
/* Calculation of index of the table */ /* Calculation of index of the table */
findex = (float32_t) FAST_MATH_TABLE_SIZE * in; findex = (float32_t)FAST_MATH_TABLE_SIZE * in;
index = ((uint16_t)findex) & 0x1ff; index = (uint16_t)findex;
/* when "in" is exactly 1, we need to rotate the index down to 0 */
if (index >= FAST_MATH_TABLE_SIZE) {
index = 0;
findex -= (float32_t)FAST_MATH_TABLE_SIZE;
}
/* fractional value calculation */ /* fractional value calculation */
fract = findex - (float32_t) index; fract = findex - (float32_t) index;

@ -78,11 +78,6 @@ float32_t arm_sin_f32(
int32_t n; int32_t n;
float32_t findex; float32_t findex;
/* Special case for small negative inputs */
if ((x < 0.0f) && (x >= -1.9e-7f)) {
return x;
}
/* input x is in radians */ /* input x is in radians */
/* Scale the input to [0 1] range from [0 2*PI] , divide input by 2*pi */ /* Scale the input to [0 1] range from [0 2*PI] , divide input by 2*pi */
in = x * 0.159154943092f; in = x * 0.159154943092f;
@ -100,9 +95,14 @@ float32_t arm_sin_f32(
in = in - (float32_t) n; in = in - (float32_t) n;
/* Calculation of index of the table */ /* Calculation of index of the table */
findex = (float32_t) FAST_MATH_TABLE_SIZE * in; findex = (float32_t)FAST_MATH_TABLE_SIZE * in;
index = (uint16_t)findex;
index = ((uint16_t)findex) & 0x1ff; /* when "in" is exactly 1, we need to rotate the index down to 0 */
if (index >= FAST_MATH_TABLE_SIZE) {
index = 0;
findex -= (float32_t)FAST_MATH_TABLE_SIZE;
}
/* fractional value calculation */ /* fractional value calculation */
fract = findex - (float32_t) index; fract = findex - (float32_t) index;

Loading…
Cancel
Save