# vectorscope / sin_table.c

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89``` ```/** \file * Fixed point sin() function. */ #include "sin_table.h" #include #include #include #include "memspaces.h" static const uint8_t PROGMEM sin_table[] = { 0, 25, 50, 74, 98, 121, 142, 162, 181, 198, 213, 226, 237, 245, 251, 255, 255 // duplicate to avoid extra code for handling last case }; int8_t sin_lookup( uint8_t theta ) { int sign = 1; if (theta < 64) { // q1, upward slope, normal theta, positive sign } else if (theta < 128) { theta = 128 - theta; // downward slope, still positive } else if (theta < 192) { // q3, downward slope, negative side theta = theta - 128; sign = -1; } else { // q4, upward slope, negative side theta = 256 - theta; sign = -1; } int16_t s1 = pgm_read_byte(&sin_table[(theta >> 2) + 0]); int16_t s2 = pgm_read_byte(&sin_table[(theta >> 2) + 1]); int8_t result = (s1 + ((s2 - s1) * (theta & 0x3)) / 4) / 2; if (sign == -1) return -result; else return result; } #if 0 int main(void) { unsigned theta; for (theta = 0 ; theta < 0x100 ; theta++) { double sx = sin_lookup(theta) / 128.0; double sf = sin(theta * 2 * M_PI / 256.0); double cx = cos_lookup(theta) / 128.0; double cf = cos(theta * 2 * M_PI / 256.0); printf("%.4f %.4f %.4f\n", cx, cf, cf - cx ); } } #endif ```
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.