foo
[regis] / sincos.h
1 #ifndef SINCOS_H_
2 #define SINCOS_H_
3
4 #include <stdint.h>
5
6 /*#define M_PI_X16      (int32_t)(M_PI * 65536.0) */
7 #define M_PI_X16        (int32_t)((31416 << 16) / 10000)
8
9 #define SINLUT_SCALE    512
10 #define SINLUT_SIZE             512
11 int16_t sinlut[SINLUT_SIZE];
12
13 void sincos_init(void);
14
15 /* takes angle in [0, SINLUT_SIZE] and returns:
16  * sin(2 * angle / SINLUT_SIZE / pi) * SINLUT_SCALE
17  */
18 int16_t sin_int(int16_t norm_angle);
19 int16_t cos_int(int16_t norm_angle);
20
21 /* takes angle in fixed point 16.16 radians [0, 2pi << 16]
22  * and returns 16.16 fixed point in [-1 << 16, 1 << 16]
23  */
24 int32_t sin_x16(int32_t radians);
25 int32_t cos_x16(int32_t radians);
26
27 #endif  /* SINCOS_H_ */