diff options
| author | John Wilbert M. Villamor <lameguy64@gmail.com> | 2019-04-06 10:11:07 +0800 |
|---|---|---|
| committer | John Wilbert M. Villamor <lameguy64@gmail.com> | 2019-04-06 10:11:07 +0800 |
| commit | f3e040230772f978540a71aea43dfde200992922 (patch) | |
| tree | bd8ca31b72dd01e24980b073854e263589530f56 /libpsn00b/psxgte/hisin.c | |
| download | psn00bsdk-f3e040230772f978540a71aea43dfde200992922.tar.gz | |
First commit
Diffstat (limited to 'libpsn00b/psxgte/hisin.c')
| -rw-r--r-- | libpsn00b/psxgte/hisin.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/libpsn00b/psxgte/hisin.c b/libpsn00b/psxgte/hisin.c new file mode 100644 index 0000000..68d5d28 --- /dev/null +++ b/libpsn00b/psxgte/hisin.c @@ -0,0 +1,33 @@ +/* Based on isin_S4 implementation from coranac: + * http://www.coranac.com/2009/07/sines/ + * + */ + +#define qN 15 +#define qA 12 +#define B 19900 +#define C 3516 + +int hisin(int x) { + + int c, x2, y; + + c= x<<(30-qN); // Semi-circle info into carry. + x -= 1<<qN; // sine -> cosine calc + + x= x<<(31-qN); // Mask with PI + x= x>>(31-qN); // Note: SIGNED shift! (to qN) + x= x*x>>(2*qN-14); // x=x^2 To Q14 + + y= B - (x*C>>14); // B - x^2*C + y= (1<<qA)-(x*y>>16); // A - x^2*(B-x^2*C) + + return c>=0 ? y : -y; + +} + +int hicos(int x) { + + return hisin( x+32768 ); + +} |
