Fast 8-bit and 16-bit approximations of sin(x) and cos(x).
Don't use these approximations for calculating the trajectory of a rocket to Mars, but they're great for art projects and LED displays.
On Arduino/AVR, the 16-bit approximation is more than 10X faster than floating point sin(x) and cos(x), while the 8-bit approximation is more than 20X faster.
const uint8_t | b_m16_interleave [] = {0, 49, 49, 41, 90, 27, 117, 10} |
| Pre-calculated lookup table used in sin8() and cos8() functions.
|
|
LIB8STATIC int16_t | sin16_C (uint16_t theta) |
| Fast 16-bit approximation of sin(x).
|
|
LIB8STATIC int16_t | cos16 (uint16_t theta) |
| Fast 16-bit approximation of cos(x).
|
|
LIB8STATIC uint8_t | sin8_C (uint8_t theta) |
| Fast 8-bit approximation of sin(x).
|
|
LIB8STATIC uint8_t | cos8 (uint8_t theta) |
| Fast 8-bit approximation of cos(x).
|
|
#define | sin16 sin16_C |
| Platform-independent alias of the fast sin implementation.
|
|
#define | sin8 sin8_C |
| Platform-independent alias of the fast sin implementation.
|
|
◆ sin16
Platform-independent alias of the fast sin implementation.
Definition at line 91 of file trig8.h.
◆ sin8
Platform-independent alias of the fast sin implementation.
Definition at line 207 of file trig8.h.
◆ cos16()
LIB8STATIC int16_t cos16 |
( |
uint16_t | theta | ) |
|
Fast 16-bit approximation of cos(x).
This approximation never varies more than 0.69% from the floating point value you'd get by doing
float s = cos(x) * 32767.0;
- Parameters
-
theta | input angle from 0-65535 |
- Returns
- cos of theta, value between -32767 to 32767.
- Examples
- XYMatrix.ino.
Definition at line 135 of file trig8.h.
◆ cos8()
LIB8STATIC uint8_t cos8 |
( |
uint8_t | theta | ) |
|
Fast 8-bit approximation of cos(x).
This approximation never varies more than 2% from the floating point value you'd get by doing
float s = (cos(x) * 128.0) + 128;
- Parameters
-
theta | input angle from 0-255 |
- Returns
- cos of theta, value between 0 and 255
Definition at line 257 of file trig8.h.
◆ sin16_C()
LIB8STATIC int16_t sin16_C |
( |
uint16_t | theta | ) |
|
Fast 16-bit approximation of sin(x).
This approximation never varies more than 0.69% from the floating point value you'd get by doing
float s = sin(x) * 32767.0;
- Parameters
-
theta | input angle from 0-65535 |
- Returns
- sin of theta, value between -32767 to 32767.
Definition at line 101 of file trig8.h.
◆ sin8_C()
LIB8STATIC uint8_t sin8_C |
( |
uint8_t | theta | ) |
|
Fast 8-bit approximation of sin(x).
This approximation never varies more than 2% from the floating point value you'd get by doing
float s = (sin(x) * 128.0) + 128;
- Parameters
-
theta | input angle from 0-255 |
- Returns
- sin of theta, value between 0 and 255
Definition at line 217 of file trig8.h.
◆ b_m16_interleave
const uint8_t b_m16_interleave[] = {0, 49, 49, 41, 90, 27, 117, 10} |