-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathTrig.cpp
431 lines (422 loc) · 20.2 KB
/
Trig.cpp
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
#include <assert.h>
#include "Num.h"
#include "Util.h"
#include "Trig.h"
#include <stdio.h>
namespace Fixie {
namespace Trig {
const Num pi = Num::createByRaw(3217);
const Num twoPi = Num::createByRaw(6434);
const Num halfPi = Num::createByRaw(1608);
const Num inverseTwoPi = Num::createByRaw(163);
int16_t sineTable[] = {
0, 6, 13, 19, 25, 31, 38, 44,
50, 57, 63, 69, 75, 82, 88, 94,
100, 107, 113, 119, 125, 132, 138, 144,
150, 156, 163, 169, 175, 181, 187, 194,
200, 206, 212, 218, 224, 230, 237, 243,
249, 255, 261, 267, 273, 279, 285, 291,
297, 303, 309, 315, 321, 327, 333, 339,
345, 351, 357, 363, 369, 374, 380, 386,
392, 398, 403, 409, 415, 421, 426, 432,
438, 443, 449, 455, 460, 466, 472, 477,
483, 488, 494, 499, 505, 510, 516, 521,
526, 532, 537, 543, 548, 553, 558, 564,
569, 574, 579, 584, 590, 595, 600, 605,
610, 615, 620, 625, 630, 635, 640, 645,
650, 654, 659, 664, 669, 674, 678, 683,
688, 692, 697, 702, 706, 711, 715, 720,
724, 729, 733, 737, 742, 746, 750, 755,
759, 763, 767, 771, 775, 779, 784, 788,
792, 796, 799, 803, 807, 811, 815, 819,
822, 826, 830, 834, 837, 841, 844, 848,
851, 855, 858, 862, 865, 868, 872, 875,
878, 882, 885, 888, 891, 894, 897, 900,
903, 906, 909, 912, 915, 917, 920, 923,
926, 928, 931, 934, 936, 939, 941, 944,
946, 948, 951, 953, 955, 958, 960, 962,
964, 966, 968, 970, 972, 974, 976, 978,
980, 982, 983, 985, 987, 989, 990, 992,
993, 995, 996, 998, 999, 1000, 1002, 1003,
1004, 1006, 1007, 1008, 1009, 1010, 1011, 1012,
1013, 1014, 1015, 1016, 1016, 1017, 1018, 1018,
1019, 1020, 1020, 1021, 1021, 1022, 1022, 1022,
1023, 1023, 1023, 1024, 1024, 1024, 1024, 1024,
1024, 1024, 1024, 1024, 1024, 1024, 1023, 1023,
1023, 1022, 1022, 1022, 1021, 1021, 1020, 1020,
1019, 1018, 1018, 1017, 1016, 1016, 1015, 1014,
1013, 1012, 1011, 1010, 1009, 1008, 1007, 1006,
1004, 1003, 1002, 1000, 999, 998, 996, 995,
993, 992, 990, 989, 987, 985, 983, 982,
980, 978, 976, 974, 972, 970, 968, 966,
964, 962, 960, 958, 955, 953, 951, 948,
946, 944, 941, 939, 936, 934, 931, 928,
926, 923, 920, 917, 915, 912, 909, 906,
903, 900, 897, 894, 891, 888, 885, 882,
878, 875, 872, 868, 865, 862, 858, 855,
851, 848, 844, 841, 837, 834, 830, 826,
822, 819, 815, 811, 807, 803, 799, 796,
792, 788, 784, 779, 775, 771, 767, 763,
759, 755, 750, 746, 742, 737, 733, 729,
724, 720, 715, 711, 706, 702, 697, 692,
688, 683, 678, 674, 669, 664, 659, 654,
650, 645, 640, 635, 630, 625, 620, 615,
610, 605, 600, 595, 590, 584, 579, 574,
569, 564, 558, 553, 548, 543, 537, 532,
526, 521, 516, 510, 505, 499, 494, 488,
483, 477, 472, 466, 460, 455, 449, 443,
438, 432, 426, 421, 415, 409, 403, 398,
392, 386, 380, 374, 369, 363, 357, 351,
345, 339, 333, 327, 321, 315, 309, 303,
297, 291, 285, 279, 273, 267, 261, 255,
249, 243, 237, 230, 224, 218, 212, 206,
200, 194, 187, 181, 175, 169, 163, 156,
150, 144, 138, 132, 125, 119, 113, 107,
100, 94, 88, 82, 75, 69, 63, 57,
50, 44, 38, 31, 25, 19, 13, 6,
0, -6, -13, -19, -25, -31, -38, -44,
-50, -57, -63, -69, -75, -82, -88, -94,
-100, -107, -113, -119, -125, -132, -138, -144,
-150, -156, -163, -169, -175, -181, -187, -194,
-200, -206, -212, -218, -224, -230, -237, -243,
-249, -255, -261, -267, -273, -279, -285, -291,
-297, -303, -309, -315, -321, -327, -333, -339,
-345, -351, -357, -363, -369, -374, -380, -386,
-392, -398, -403, -409, -415, -421, -426, -432,
-438, -443, -449, -455, -460, -466, -472, -477,
-483, -488, -494, -499, -505, -510, -516, -521,
-526, -532, -537, -543, -548, -553, -558, -564,
-569, -574, -579, -584, -590, -595, -600, -605,
-610, -615, -620, -625, -630, -635, -640, -645,
-650, -654, -659, -664, -669, -674, -678, -683,
-688, -692, -697, -702, -706, -711, -715, -720,
-724, -729, -733, -737, -742, -746, -750, -755,
-759, -763, -767, -771, -775, -779, -784, -788,
-792, -796, -799, -803, -807, -811, -815, -819,
-822, -826, -830, -834, -837, -841, -844, -848,
-851, -855, -858, -862, -865, -868, -872, -875,
-878, -882, -885, -888, -891, -894, -897, -900,
-903, -906, -909, -912, -915, -917, -920, -923,
-926, -928, -931, -934, -936, -939, -941, -944,
-946, -948, -951, -953, -955, -958, -960, -962,
-964, -966, -968, -970, -972, -974, -976, -978,
-980, -982, -983, -985, -987, -989, -990, -992,
-993, -995, -996, -998, -999, -1000, -1002, -1003,
-1004, -1006, -1007, -1008, -1009, -1010, -1011, -1012,
-1013, -1014, -1015, -1016, -1016, -1017, -1018, -1018,
-1019, -1020, -1020, -1021, -1021, -1022, -1022, -1022,
-1023, -1023, -1023, -1024, -1024, -1024, -1024, -1024,
-1024, -1024, -1024, -1024, -1024, -1024, -1023, -1023,
-1023, -1022, -1022, -1022, -1021, -1021, -1020, -1020,
-1019, -1018, -1018, -1017, -1016, -1016, -1015, -1014,
-1013, -1012, -1011, -1010, -1009, -1008, -1007, -1006,
-1004, -1003, -1002, -1000, -999, -998, -996, -995,
-993, -992, -990, -989, -987, -985, -983, -982,
-980, -978, -976, -974, -972, -970, -968, -966,
-964, -962, -960, -958, -955, -953, -951, -948,
-946, -944, -941, -939, -936, -934, -931, -928,
-926, -923, -920, -917, -915, -912, -909, -906,
-903, -900, -897, -894, -891, -888, -885, -882,
-878, -875, -872, -868, -865, -862, -858, -855,
-851, -848, -844, -841, -837, -834, -830, -826,
-822, -819, -815, -811, -807, -803, -799, -796,
-792, -788, -784, -779, -775, -771, -767, -763,
-759, -755, -750, -746, -742, -737, -733, -729,
-724, -720, -715, -711, -706, -702, -697, -692,
-688, -683, -678, -674, -669, -664, -659, -654,
-650, -645, -640, -635, -630, -625, -620, -615,
-610, -605, -600, -595, -590, -584, -579, -574,
-569, -564, -558, -553, -548, -543, -537, -532,
-526, -521, -516, -510, -505, -499, -494, -488,
-483, -477, -472, -466, -460, -455, -449, -443,
-438, -432, -426, -421, -415, -409, -403, -398,
-392, -386, -380, -374, -369, -363, -357, -351,
-345, -339, -333, -327, -321, -315, -309, -303,
-297, -291, -285, -279, -273, -267, -261, -255,
-249, -243, -237, -230, -224, -218, -212, -206,
-200, -194, -187, -181, -175, -169, -163, -156,
-150, -144, -138, -132, -125, -119, -113, -107,
-100, -94, -88, -82, -75, -69, -63, -57,
-50, -44, -38, -31, -25, -19, -13, -6
};
int16_t cosineTable[] = {
1024, 1024, 1024, 1024, 1024, 1024, 1023, 1023,
1023, 1022, 1022, 1022, 1021, 1021, 1020, 1020,
1019, 1018, 1018, 1017, 1016, 1016, 1015, 1014,
1013, 1012, 1011, 1010, 1009, 1008, 1007, 1006,
1004, 1003, 1002, 1000, 999, 998, 996, 995,
993, 992, 990, 989, 987, 985, 983, 982,
980, 978, 976, 974, 972, 970, 968, 966,
964, 962, 960, 958, 955, 953, 951, 948,
946, 944, 941, 939, 936, 934, 931, 928,
926, 923, 920, 917, 915, 912, 909, 906,
903, 900, 897, 894, 891, 888, 885, 882,
878, 875, 872, 868, 865, 862, 858, 855,
851, 848, 844, 841, 837, 834, 830, 826,
822, 819, 815, 811, 807, 803, 799, 796,
792, 788, 784, 779, 775, 771, 767, 763,
759, 755, 750, 746, 742, 737, 733, 729,
724, 720, 715, 711, 706, 702, 697, 692,
688, 683, 678, 674, 669, 664, 659, 654,
650, 645, 640, 635, 630, 625, 620, 615,
610, 605, 600, 595, 590, 584, 579, 574,
569, 564, 558, 553, 548, 543, 537, 532,
526, 521, 516, 510, 505, 499, 494, 488,
483, 477, 472, 466, 460, 455, 449, 443,
438, 432, 426, 421, 415, 409, 403, 398,
392, 386, 380, 374, 369, 363, 357, 351,
345, 339, 333, 327, 321, 315, 309, 303,
297, 291, 285, 279, 273, 267, 261, 255,
249, 243, 237, 230, 224, 218, 212, 206,
200, 194, 187, 181, 175, 169, 163, 156,
150, 144, 138, 132, 125, 119, 113, 107,
100, 94, 88, 82, 75, 69, 63, 57,
50, 44, 38, 31, 25, 19, 13, 6,
0, -6, -13, -19, -25, -31, -38, -44,
-50, -57, -63, -69, -75, -82, -88, -94,
-100, -107, -113, -119, -125, -132, -138, -144,
-150, -156, -163, -169, -175, -181, -187, -194,
-200, -206, -212, -218, -224, -230, -237, -243,
-249, -255, -261, -267, -273, -279, -285, -291,
-297, -303, -309, -315, -321, -327, -333, -339,
-345, -351, -357, -363, -369, -374, -380, -386,
-392, -398, -403, -409, -415, -421, -426, -432,
-438, -443, -449, -455, -460, -466, -472, -477,
-483, -488, -494, -499, -505, -510, -516, -521,
-526, -532, -537, -543, -548, -553, -558, -564,
-569, -574, -579, -584, -590, -595, -600, -605,
-610, -615, -620, -625, -630, -635, -640, -645,
-650, -654, -659, -664, -669, -674, -678, -683,
-688, -692, -697, -702, -706, -711, -715, -720,
-724, -729, -733, -737, -742, -746, -750, -755,
-759, -763, -767, -771, -775, -779, -784, -788,
-792, -796, -799, -803, -807, -811, -815, -819,
-822, -826, -830, -834, -837, -841, -844, -848,
-851, -855, -858, -862, -865, -868, -872, -875,
-878, -882, -885, -888, -891, -894, -897, -900,
-903, -906, -909, -912, -915, -917, -920, -923,
-926, -928, -931, -934, -936, -939, -941, -944,
-946, -948, -951, -953, -955, -958, -960, -962,
-964, -966, -968, -970, -972, -974, -976, -978,
-980, -982, -983, -985, -987, -989, -990, -992,
-993, -995, -996, -998, -999, -1000, -1002, -1003,
-1004, -1006, -1007, -1008, -1009, -1010, -1011, -1012,
-1013, -1014, -1015, -1016, -1016, -1017, -1018, -1018,
-1019, -1020, -1020, -1021, -1021, -1022, -1022, -1022,
-1023, -1023, -1023, -1024, -1024, -1024, -1024, -1024,
-1024, -1024, -1024, -1024, -1024, -1024, -1023, -1023,
-1023, -1022, -1022, -1022, -1021, -1021, -1020, -1020,
-1019, -1018, -1018, -1017, -1016, -1016, -1015, -1014,
-1013, -1012, -1011, -1010, -1009, -1008, -1007, -1006,
-1004, -1003, -1002, -1000, -999, -998, -996, -995,
-993, -992, -990, -989, -987, -985, -983, -982,
-980, -978, -976, -974, -972, -970, -968, -966,
-964, -962, -960, -958, -955, -953, -951, -948,
-946, -944, -941, -939, -936, -934, -931, -928,
-926, -923, -920, -917, -915, -912, -909, -906,
-903, -900, -897, -894, -891, -888, -885, -882,
-878, -875, -872, -868, -865, -862, -858, -855,
-851, -848, -844, -841, -837, -834, -830, -826,
-822, -819, -815, -811, -807, -803, -799, -796,
-792, -788, -784, -779, -775, -771, -767, -763,
-759, -755, -750, -746, -742, -737, -733, -729,
-724, -720, -715, -711, -706, -702, -697, -692,
-688, -683, -678, -674, -669, -664, -659, -654,
-650, -645, -640, -635, -630, -625, -620, -615,
-610, -605, -600, -595, -590, -584, -579, -574,
-569, -564, -558, -553, -548, -543, -537, -532,
-526, -521, -516, -510, -505, -499, -494, -488,
-483, -477, -472, -466, -460, -455, -449, -443,
-438, -432, -426, -421, -415, -409, -403, -398,
-392, -386, -380, -374, -369, -363, -357, -351,
-345, -339, -333, -327, -321, -315, -309, -303,
-297, -291, -285, -279, -273, -267, -261, -255,
-249, -243, -237, -230, -224, -218, -212, -206,
-200, -194, -187, -181, -175, -169, -163, -156,
-150, -144, -138, -132, -125, -119, -113, -107,
-100, -94, -88, -82, -75, -69, -63, -57,
-50, -44, -38, -31, -25, -19, -13, -6,
0, 6, 13, 19, 25, 31, 38, 44,
50, 57, 63, 69, 75, 82, 88, 94,
100, 107, 113, 119, 125, 132, 138, 144,
150, 156, 163, 169, 175, 181, 187, 194,
200, 206, 212, 218, 224, 230, 237, 243,
249, 255, 261, 267, 273, 279, 285, 291,
297, 303, 309, 315, 321, 327, 333, 339,
345, 351, 357, 363, 369, 374, 380, 386,
392, 398, 403, 409, 415, 421, 426, 432,
438, 443, 449, 455, 460, 466, 472, 477,
483, 488, 494, 499, 505, 510, 516, 521,
526, 532, 537, 543, 548, 553, 558, 564,
569, 574, 579, 584, 590, 595, 600, 605,
610, 615, 620, 625, 630, 635, 640, 645,
650, 654, 659, 664, 669, 674, 678, 683,
688, 692, 697, 702, 706, 711, 715, 720,
724, 729, 733, 737, 742, 746, 750, 755,
759, 763, 767, 771, 775, 779, 784, 788,
792, 796, 799, 803, 807, 811, 815, 819,
822, 826, 830, 834, 837, 841, 844, 848,
851, 855, 858, 862, 865, 868, 872, 875,
878, 882, 885, 888, 891, 894, 897, 900,
903, 906, 909, 912, 915, 917, 920, 923,
926, 928, 931, 934, 936, 939, 941, 944,
946, 948, 951, 953, 955, 958, 960, 962,
964, 966, 968, 970, 972, 974, 976, 978,
980, 982, 983, 985, 987, 989, 990, 992,
993, 995, 996, 998, 999, 1000, 1002, 1003,
1004, 1006, 1007, 1008, 1009, 1010, 1011, 1012,
1013, 1014, 1015, 1016, 1016, 1017, 1018, 1018,
1019, 1020, 1020, 1021, 1021, 1022, 1022, 1022,
1023, 1023, 1023, 1024, 1024, 1024, 1024, 1024
};
uint16_t arcCosineTable[] = {
3217, 3153, 3126, 3106, 3089, 3074, 3060, 3047,
3036, 3025, 3014, 3004, 2995, 2986, 2977, 2969,
2960, 2952, 2945, 2937, 2930, 2923, 2916, 2909,
2902, 2896, 2889, 2883, 2877, 2871, 2865, 2859,
2853, 2847, 2842, 2836, 2831, 2825, 2820, 2815,
2810, 2804, 2799, 2794, 2789, 2784, 2780, 2775,
2770, 2765, 2761, 2756, 2751, 2747, 2742, 2738,
2734, 2729, 2725, 2721, 2716, 2712, 2708, 2704,
2700, 2695, 2691, 2687, 2683, 2679, 2675, 2671,
2667, 2663, 2660, 2656, 2652, 2648, 2644, 2641,
2637, 2633, 2629, 2626, 2622, 2618, 2615, 2611,
2608, 2604, 2601, 2597, 2594, 2590, 2587, 2583,
2580, 2576, 2573, 2569, 2566, 2563, 2559, 2556,
2553, 2549, 2546, 2543, 2540, 2536, 2533, 2530,
2527, 2523, 2520, 2517, 2514, 2511, 2508, 2505,
2501, 2498, 2495, 2492, 2489, 2486, 2483, 2480,
2477, 2474, 2471, 2468, 2465, 2462, 2459, 2456,
2453, 2450, 2447, 2444, 2441, 2438, 2436, 2433,
2430, 2427, 2424, 2421, 2418, 2415, 2413, 2410,
2407, 2404, 2401, 2399, 2396, 2393, 2390, 2387,
2385, 2382, 2379, 2376, 2374, 2371, 2368, 2366,
2363, 2360, 2358, 2355, 2352, 2349, 2347, 2344,
2342, 2339, 2336, 2334, 2331, 2328, 2326, 2323,
2320, 2318, 2315, 2313, 2310, 2308, 2305, 2302,
2300, 2297, 2295, 2292, 2290, 2287, 2285, 2282,
2279, 2277, 2274, 2272, 2269, 2267, 2264, 2262,
2259, 2257, 2255, 2252, 2250, 2247, 2245, 2242,
2240, 2237, 2235, 2232, 2230, 2228, 2225, 2223,
2220, 2218, 2215, 2213, 2211, 2208, 2206, 2203,
2201, 2199, 2196, 2194, 2191, 2189, 2187, 2184,
2182, 2180, 2177, 2175, 2173, 2170, 2168, 2166,
2163, 2161, 2159, 2156, 2154, 2152, 2149, 2147,
2145, 2142, 2140, 2138, 2135, 2133, 2131, 2129,
2126, 2124, 2122, 2119, 2117, 2115, 2113, 2110,
2108, 2106, 2104, 2101, 2099, 2097, 2095, 2092,
2090, 2088, 2086, 2083, 2081, 2079, 2077, 2074,
2072, 2070, 2068, 2066, 2063, 2061, 2059, 2057,
2054, 2052, 2050, 2048, 2046, 2043, 2041, 2039,
2037, 2035, 2033, 2030, 2028, 2026, 2024, 2022,
2019, 2017, 2015, 2013, 2011, 2009, 2006, 2004,
2002, 2000, 1998, 1996, 1994, 1991, 1989, 1987,
1985, 1983, 1981, 1978, 1976, 1974, 1972, 1970,
1968, 1966, 1964, 1961, 1959, 1957, 1955, 1953,
1951, 1949, 1947, 1944, 1942, 1940, 1938, 1936,
1934, 1932, 1930, 1928, 1926, 1923, 1921, 1919,
1917, 1915, 1913, 1911, 1909, 1907, 1905, 1903,
1900, 1898, 1896, 1894, 1892, 1890, 1888, 1886,
1884, 1882, 1880, 1878, 1876, 1873, 1871, 1869,
1867, 1865, 1863, 1861, 1859, 1857, 1855, 1853,
1851, 1849, 1847, 1845, 1843, 1840, 1838, 1836,
1834, 1832, 1830, 1828, 1826, 1824, 1822, 1820,
1818, 1816, 1814, 1812, 1810, 1808, 1806, 1804,
1802, 1800, 1798, 1796, 1794, 1791, 1789, 1787,
1785, 1783, 1781, 1779, 1777, 1775, 1773, 1771,
1769, 1767, 1765, 1763, 1761, 1759, 1757, 1755,
1753, 1751, 1749, 1747, 1745, 1743, 1741, 1739,
1737, 1735, 1733, 1731, 1729, 1727, 1725, 1723,
1721, 1719, 1717, 1715, 1713, 1711, 1709, 1707,
1705, 1703, 1701, 1699, 1697, 1695, 1693, 1691,
1689, 1687, 1685, 1683, 1681, 1679, 1677, 1675,
1673, 1671, 1669, 1667, 1665, 1663, 1661, 1659,
1657, 1655, 1653, 1651, 1649, 1647, 1645, 1643,
1641, 1638, 1636, 1634, 1632, 1630, 1628, 1626,
1624, 1622, 1620, 1618, 1616, 1614, 1612, 1610,
1608, 1606, 1604, 1602, 1600, 1598, 1596, 1594,
1592, 1590, 1588, 1586, 1584, 1582, 1580, 1578,
1576, 1574, 1572, 1570, 1568, 1566, 1564, 1562,
1560, 1558, 1556, 1554, 1552, 1550, 1548, 1546,
1544, 1542, 1540, 1538, 1536, 1534, 1532, 1530,
1528, 1526, 1524, 1522, 1520, 1518, 1516, 1514,
1512, 1510, 1508, 1506, 1504, 1502, 1500, 1498,
1496, 1494, 1492, 1490, 1488, 1486, 1484, 1482,
1480, 1478, 1476, 1474, 1472, 1470, 1468, 1466,
1464, 1462, 1460, 1458, 1456, 1454, 1452, 1450,
1448, 1446, 1444, 1442, 1440, 1438, 1436, 1434,
1432, 1430, 1428, 1426, 1423, 1421, 1419, 1417,
1415, 1413, 1411, 1409, 1407, 1405, 1403, 1401,
1399, 1397, 1395, 1393, 1391, 1389, 1387, 1385,
1383, 1381, 1379, 1377, 1374, 1372, 1370, 1368,
1366, 1364, 1362, 1360, 1358, 1356, 1354, 1352,
1350, 1348, 1346, 1344, 1341, 1339, 1337, 1335,
1333, 1331, 1329, 1327, 1325, 1323, 1321, 1319,
1317, 1314, 1312, 1310, 1308, 1306, 1304, 1302,
1300, 1298, 1296, 1294, 1291, 1289, 1287, 1285,
1283, 1281, 1279, 1277, 1275, 1272, 1270, 1268,
1266, 1264, 1262, 1260, 1258, 1256, 1253, 1251,
1249, 1247, 1245, 1243, 1241, 1238, 1236, 1234,
1232, 1230, 1228, 1226, 1223, 1221, 1219, 1217,
1215, 1213, 1211, 1208, 1206, 1204, 1202, 1200,
1198, 1195, 1193, 1191, 1189, 1187, 1184, 1182,
1180, 1178, 1176, 1174, 1171, 1169, 1167, 1165,
1163, 1160, 1158, 1156, 1154, 1151, 1149, 1147,
1145, 1143, 1140, 1138, 1136, 1134, 1131, 1129,
1127, 1125, 1122, 1120, 1118, 1116, 1113, 1111,
1109, 1107, 1104, 1102, 1100, 1098, 1095, 1093,
1091, 1088, 1086, 1084, 1082, 1079, 1077, 1075,
1072, 1070, 1068, 1065, 1063, 1061, 1058, 1056,
1054, 1051, 1049, 1047, 1044, 1042, 1040, 1037,
1035, 1033, 1030, 1028, 1026, 1023, 1021, 1018,
1016, 1014, 1011, 1009, 1006, 1004, 1002, 999,
997, 994, 992, 989, 987, 985, 982, 980,
977, 975, 972, 970, 967, 965, 962, 960,
958, 955, 953, 950, 948, 945, 943, 940,
937, 935, 932, 930, 927, 925, 922, 920,
917, 915, 912, 909, 907, 904, 902, 899,
896, 894, 891, 889, 886, 883, 881, 878,
875, 873, 870, 867, 865, 862, 859, 857,
854, 851, 849, 846, 843, 840, 838, 835,
832, 830, 827, 824, 821, 818, 816, 813,
810, 807, 804, 802, 799, 796, 793, 790,
787, 784, 781, 779, 776, 773, 770, 767,
764, 761, 758, 755, 752, 749, 746, 743,
740, 737, 734, 731, 728, 725, 722, 719,
716, 712, 709, 706, 703, 700, 697, 694,
690, 687, 684, 681, 677, 674, 671, 668,
664, 661, 658, 654, 651, 648, 644, 641,
637, 634, 630, 627, 623, 620, 616, 613,
609, 606, 602, 599, 595, 591, 588, 584,
580, 576, 573, 569, 565, 561, 557, 554,
550, 546, 542, 538, 534, 530, 526, 522,
517, 513, 509, 505, 501, 496, 492, 488,
483, 479, 475, 470, 466, 461, 456, 452,
447, 442, 437, 433, 428, 423, 418, 413,
407, 402, 397, 392, 386, 381, 375, 370,
364, 358, 352, 346, 340, 334, 328, 321,
315, 308, 301, 294, 287, 280, 272, 265,
257, 248, 240, 231, 222, 213, 203, 192,
181, 170, 157, 143, 128, 111, 91, 64,
0
};
Num normalizeAngle(Num angle) {
return angle - twoPi * Util::floor(angle*inverseTwoPi);
}
Num sin(Num n) {
const Num radians = normalizeAngle(n);
const Num ratio = radians*inverseTwoPi;
return Num::createByRaw(sineTable[ratio.raw]);
}
Num cos(Num n) {
const Num radians = normalizeAngle(n);
const Num ratio = radians*inverseTwoPi;
return Num::createByRaw(cosineTable[ratio.raw]);
}
Num acos(Num n) {
assert(n >= Num(-1) && n <= Num(1));
uint16_t index = Util::halve(n+Num(1)).raw;
return Num::createByRaw(arcCosineTable[index]);
}
}
}