23 #ifndef INCLUDED_GR_FXPT_H
24 #define INCLUDED_GR_FXPT_H
44 static const int WORDBITS = 32;
45 static const int NBITS = 10;
46 static const float s_sine_table[1 << NBITS][2];
47 static const float PI;
48 static const float TAU;
49 static const float TWO_TO_THE_31;
55 int d = (int)std::floor(x / TAU + 0.5);
58 return (int32_t)((float)x * TWO_TO_THE_31 / PI);
66 static float sin(int32_t x)
69 int index = ux >> (WORDBITS - NBITS);
70 return s_sine_table[index][0] * (ux >> 1) + s_sine_table[index][1];
76 static float cos(int32_t x)
78 uint32_t ux = x + 0x40000000;
79 int index = ux >> (WORDBITS - NBITS);
80 return s_sine_table[index][0] * (ux >> 1) + s_sine_table[index][1];
86 static void sincos(int32_t x,
float* s,
float* c)
89 int sin_index = ux >> (WORDBITS - NBITS);
90 *s = s_sine_table[sin_index][0] * (ux >> 1) + s_sine_table[sin_index][1];
93 int cos_index = ux >> (WORDBITS - NBITS);
94 *c = s_sine_table[cos_index][0] * (ux >> 1) + s_sine_table[cos_index][1];