EFL 1.7 svn doobies
[profile/ivi/eina.git] / src / lib / eina_fp.c
1 #ifdef HAVE_CONFIG_H
2 # include "config.h"
3 #endif
4
5 #include <stdio.h>
6 #include <math.h>
7
8 #include "eina_types.h"
9 #include "eina_fp.h"
10
11 #define MAX_PREC 1025
12 static const Eina_F32p32 eina_trigo[MAX_PREC] =
13 {
14    0x0000000100000000, 0x00000000ffffec43, 0x00000000ffffb10b,
15    0x00000000ffff4e5a, 0x00000000fffec42e, 0x00000000fffe1287,
16    0x00000000fffd3967, 0x00000000fffc38cd, 0x00000000fffb10b9,
17    0x00000000fff9c12c,
18    0x00000000fff84a25, 0x00000000fff6aba5, 0x00000000fff4e5ac,
19    0x00000000fff2f83b, 0x00000000fff0e351, 0x00000000ffeea6ef,
20    0x00000000ffec4316, 0x00000000ffe9b7c5, 0x00000000ffe704fe,
21    0x00000000ffe42ac0,
22    0x00000000ffe1290b, 0x00000000ffddffe2, 0x00000000ffdaaf43,
23    0x00000000ffd7372f, 0x00000000ffd397a8, 0x00000000ffcfd0ad,
24    0x00000000ffcbe23f, 0x00000000ffc7cc5f, 0x00000000ffc38f0d,
25    0x00000000ffbf2a4b,
26    0x00000000ffba9e17, 0x00000000ffb5ea75, 0x00000000ffb10f63,
27    0x00000000ffac0ce3, 0x00000000ffa6e2f6, 0x00000000ffa1919c,
28    0x00000000ff9c18d6, 0x00000000ff9678a6, 0x00000000ff90b10b,
29    0x00000000ff8ac208,
30    0x00000000ff84ab9c, 0x00000000ff7e6dc8, 0x00000000ff78088f,
31    0x00000000ff717bf0, 0x00000000ff6ac7ec, 0x00000000ff63ec85,
32    0x00000000ff5ce9bc, 0x00000000ff55bf92, 0x00000000ff4e6e08,
33    0x00000000ff46f51f,
34    0x00000000ff3f54d8, 0x00000000ff378d34, 0x00000000ff2f9e35,
35    0x00000000ff2787dc, 0x00000000ff1f4a2a, 0x00000000ff16e520,
36    0x00000000ff0e58c0, 0x00000000ff05a50a, 0x00000000fefcca01,
37    0x00000000fef3c7a6,
38    0x00000000feea9df9, 0x00000000fee14cfe, 0x00000000fed7d4b3,
39    0x00000000fece351d, 0x00000000fec46e3b, 0x00000000feba800f,
40    0x00000000feb06a9c, 0x00000000fea62de1, 0x00000000fe9bc9e2,
41    0x00000000fe913e9f,
42    0x00000000fe868c1b, 0x00000000fe7bb256, 0x00000000fe70b153,
43    0x00000000fe658913, 0x00000000fe5a3998, 0x00000000fe4ec2e4,
44    0x00000000fe4324f9, 0x00000000fe375fd7, 0x00000000fe2b7382,
45    0x00000000fe1f5ffa,
46    0x00000000fe132543, 0x00000000fe06c35d, 0x00000000fdfa3a4b,
47    0x00000000fded8a0e, 0x00000000fde0b2a8, 0x00000000fdd3b41c,
48    0x00000000fdc68e6c, 0x00000000fdb94199, 0x00000000fdabcda5,
49    0x00000000fd9e3294,
50    0x00000000fd907065, 0x00000000fd82871d, 0x00000000fd7476bd,
51    0x00000000fd663f46, 0x00000000fd57e0bd, 0x00000000fd495b21,
52    0x00000000fd3aae77, 0x00000000fd2bdabf, 0x00000000fd1cdffd,
53    0x00000000fd0dbe32,
54    0x00000000fcfe7562, 0x00000000fcef058e, 0x00000000fcdf6eb8,
55    0x00000000fccfb0e4, 0x00000000fcbfcc13, 0x00000000fcafc048,
56    0x00000000fc9f8d86, 0x00000000fc8f33ce, 0x00000000fc7eb325,
57    0x00000000fc6e0b8b,
58    0x00000000fc5d3d03, 0x00000000fc4c4791, 0x00000000fc3b2b37,
59    0x00000000fc29e7f7, 0x00000000fc187dd5, 0x00000000fc06ecd2,
60    0x00000000fbf534f2, 0x00000000fbe35637, 0x00000000fbd150a3,
61    0x00000000fbbf243b,
62    0x00000000fbacd100, 0x00000000fb9a56f6, 0x00000000fb87b61f,
63    0x00000000fb74ee7e, 0x00000000fb620016, 0x00000000fb4eeaea,
64    0x00000000fb3baefd, 0x00000000fb284c52, 0x00000000fb14c2eb,
65    0x00000000fb0112cd,
66    0x00000000faed3bf9, 0x00000000fad93e73, 0x00000000fac51a3f,
67    0x00000000fab0cf5e, 0x00000000fa9c5dd5, 0x00000000fa87c5a6,
68    0x00000000fa7306d5, 0x00000000fa5e2164, 0x00000000fa491558,
69    0x00000000fa33e2b3,
70    0x00000000fa1e8978, 0x00000000fa0909ab, 0x00000000f9f36350,
71    0x00000000f9dd9668, 0x00000000f9c7a2f9, 0x00000000f9b18905,
72    0x00000000f99b488f, 0x00000000f984e19c, 0x00000000f96e542e,
73    0x00000000f957a049,
74    0x00000000f940c5f1, 0x00000000f929c528, 0x00000000f9129df3,
75    0x00000000f8fb5056, 0x00000000f8e3dc53, 0x00000000f8cc41ee,
76    0x00000000f8b4812b, 0x00000000f89c9a0e, 0x00000000f8848c9b,
77    0x00000000f86c58d4,
78    0x00000000f853febe, 0x00000000f83b7e5d, 0x00000000f822d7b4,
79    0x00000000f80a0ac7, 0x00000000f7f1179a, 0x00000000f7d7fe31,
80    0x00000000f7bebe90, 0x00000000f7a558ba, 0x00000000f78bccb3,
81    0x00000000f7721a80,
82    0x00000000f7584225, 0x00000000f73e43a5, 0x00000000f7241f04,
83    0x00000000f709d446, 0x00000000f6ef6370, 0x00000000f6d4cc85,
84    0x00000000f6ba0f8a, 0x00000000f69f2c83, 0x00000000f6842374,
85    0x00000000f668f461,
86    0x00000000f64d9f4e, 0x00000000f632243f, 0x00000000f616833a,
87    0x00000000f5fabc41, 0x00000000f5decf59, 0x00000000f5c2bc87,
88    0x00000000f5a683cf, 0x00000000f58a2535, 0x00000000f56da0be,
89    0x00000000f550f66e,
90    0x00000000f5342649, 0x00000000f5173054, 0x00000000f4fa1494,
91    0x00000000f4dcd30c, 0x00000000f4bf6bc2, 0x00000000f4a1deb9,
92    0x00000000f4842bf7, 0x00000000f4665380, 0x00000000f4485559,
93    0x00000000f42a3186,
94    0x00000000f40be80c, 0x00000000f3ed78ef, 0x00000000f3cee434,
95    0x00000000f3b029e1, 0x00000000f39149f9, 0x00000000f3724482,
96    0x00000000f3531980, 0x00000000f333c8f8, 0x00000000f31452ef,
97    0x00000000f2f4b76a,
98    0x00000000f2d4f66d, 0x00000000f2b50ffe, 0x00000000f2950421,
99    0x00000000f274d2dc, 0x00000000f2547c33, 0x00000000f234002b,
100    0x00000000f2135eca, 0x00000000f1f29814, 0x00000000f1d1ac0e,
101    0x00000000f1b09abe,
102    0x00000000f18f6429, 0x00000000f16e0853, 0x00000000f14c8742,
103    0x00000000f12ae0fb, 0x00000000f1091583, 0x00000000f0e724e0,
104    0x00000000f0c50f17, 0x00000000f0a2d42c, 0x00000000f0807426,
105    0x00000000f05def09,
106    0x00000000f03b44db, 0x00000000f01875a1, 0x00000000eff58161,
107    0x00000000efd2681f, 0x00000000efaf29e2, 0x00000000ef8bc6af,
108    0x00000000ef683e8b, 0x00000000ef44917b, 0x00000000ef20bf86,
109    0x00000000eefcc8b1,
110    0x00000000eed8ad01, 0x00000000eeb46c7b, 0x00000000ee900727,
111    0x00000000ee6b7d08, 0x00000000ee46ce25, 0x00000000ee21fa83,
112    0x00000000edfd0228, 0x00000000edd7e51a, 0x00000000edb2a35f,
113    0x00000000ed8d3cfc,
114    0x00000000ed67b1f6, 0x00000000ed420255, 0x00000000ed1c2e1d,
115    0x00000000ecf63554, 0x00000000ecd01801, 0x00000000eca9d628,
116    0x00000000ec836fd1, 0x00000000ec5ce501, 0x00000000ec3635bd,
117    0x00000000ec0f620d,
118    0x00000000ebe869f5, 0x00000000ebc14d7d, 0x00000000eb9a0ca9,
119    0x00000000eb72a780, 0x00000000eb4b1e08, 0x00000000eb237047,
120    0x00000000eafb9e43, 0x00000000ead3a803, 0x00000000eaab8d8d,
121    0x00000000ea834ee6,
122    0x00000000ea5aec15, 0x00000000ea326520, 0x00000000ea09ba0d,
123    0x00000000e9e0eae4, 0x00000000e9b7f7a9, 0x00000000e98ee063,
124    0x00000000e965a51a, 0x00000000e93c45d2, 0x00000000e912c292,
125    0x00000000e8e91b61,
126    0x00000000e8bf5046, 0x00000000e8956146, 0x00000000e86b4e68,
127    0x00000000e84117b3, 0x00000000e816bd2d, 0x00000000e7ec3edc,
128    0x00000000e7c19cc8, 0x00000000e796d6f6, 0x00000000e76bed6e,
129    0x00000000e740e036,
130    0x00000000e715af54, 0x00000000e6ea5ad0, 0x00000000e6bee2af,
131    0x00000000e69346f9, 0x00000000e66787b5, 0x00000000e63ba4e9,
132    0x00000000e60f9e9b, 0x00000000e5e374d4, 0x00000000e5b72798,
133    0x00000000e58ab6f1,
134    0x00000000e55e22e3, 0x00000000e5316b76, 0x00000000e50490b1,
135    0x00000000e4d7929c, 0x00000000e4aa713c, 0x00000000e47d2c98,
136    0x00000000e44fc4b9, 0x00000000e42239a4, 0x00000000e3f48b61,
137    0x00000000e3c6b9f7,
138    0x00000000e398c56c, 0x00000000e36aadc9, 0x00000000e33c7314,
139    0x00000000e30e1554, 0x00000000e2df9490, 0x00000000e2b0f0d0,
140    0x00000000e2822a1a, 0x00000000e2534077, 0x00000000e22433ec,
141    0x00000000e1f50482,
142    0x00000000e1c5b240, 0x00000000e1963d2d, 0x00000000e166a550,
143    0x00000000e136eab0, 0x00000000e1070d56, 0x00000000e0d70d48,
144    0x00000000e0a6ea8e, 0x00000000e076a52f, 0x00000000e0463d33,
145    0x00000000e015b2a1,
146    0x00000000dfe50580, 0x00000000dfb435d9, 0x00000000df8343b2,
147    0x00000000df522f13, 0x00000000df20f804, 0x00000000deef9e8d,
148    0x00000000debe22b5, 0x00000000de8c8483, 0x00000000de5ac3ff,
149    0x00000000de28e131,
150    0x00000000ddf6dc21, 0x00000000ddc4b4d6, 0x00000000dd926b59,
151    0x00000000dd5fffb0, 0x00000000dd2d71e3, 0x00000000dcfac1fb,
152    0x00000000dcc7f000, 0x00000000dc94fbf8, 0x00000000dc61e5ec,
153    0x00000000dc2eade4,
154    0x00000000dbfb53e8, 0x00000000dbc7d7ff, 0x00000000db943a31,
155    0x00000000db607a88, 0x00000000db2c9909, 0x00000000daf895bf,
156    0x00000000dac470af, 0x00000000da9029e3, 0x00000000da5bc163,
157    0x00000000da273737,
158    0x00000000d9f28b66, 0x00000000d9bdbdf9, 0x00000000d988cef8,
159    0x00000000d953be6b, 0x00000000d91e8c5b, 0x00000000d8e938d0,
160    0x00000000d8b3c3d1, 0x00000000d87e2d67, 0x00000000d848759b,
161    0x00000000d8129c74,
162    0x00000000d7dca1fb, 0x00000000d7a68638, 0x00000000d7704934,
163    0x00000000d739eaf7, 0x00000000d7036b89, 0x00000000d6cccaf3,
164    0x00000000d696093d, 0x00000000d65f266f, 0x00000000d6282293,
165    0x00000000d5f0fdb0,
166    0x00000000d5b9b7d0, 0x00000000d58250fa, 0x00000000d54ac937,
167    0x00000000d513208f, 0x00000000d4db570c, 0x00000000d4a36cb6,
168    0x00000000d46b6195, 0x00000000d43335b3, 0x00000000d3fae917,
169    0x00000000d3c27bcb,
170    0x00000000d389edd7, 0x00000000d3513f43, 0x00000000d318701a,
171    0x00000000d2df8063, 0x00000000d2a67027, 0x00000000d26d3f6f,
172    0x00000000d233ee43, 0x00000000d1fa7cae, 0x00000000d1c0eab7,
173    0x00000000d1873867,
174    0x00000000d14d65c8, 0x00000000d11372e1, 0x00000000d0d95fbd,
175    0x00000000d09f2c64, 0x00000000d064d8df, 0x00000000d02a6537,
176    0x00000000cfefd176, 0x00000000cfb51da3, 0x00000000cf7a49c8,
177    0x00000000cf3f55ef,
178    0x00000000cf044220, 0x00000000cec90e64, 0x00000000ce8dbac5,
179    0x00000000ce52474c, 0x00000000ce16b401, 0x00000000cddb00ef,
180    0x00000000cd9f2e1e, 0x00000000cd633b97, 0x00000000cd272964,
181    0x00000000cceaf78e,
182    0x00000000ccaea61e, 0x00000000cc72351e, 0x00000000cc35a497,
183    0x00000000cbf8f492, 0x00000000cbbc2519, 0x00000000cb7f3634,
184    0x00000000cb4227ee, 0x00000000cb04fa50, 0x00000000cac7ad63,
185    0x00000000ca8a4131,
186    0x00000000ca4cb5c3, 0x00000000ca0f0b22, 0x00000000c9d14159,
187    0x00000000c9935870, 0x00000000c9555072, 0x00000000c9172967,
188    0x00000000c8d8e35a, 0x00000000c89a7e53, 0x00000000c85bfa5e,
189    0x00000000c81d5782,
190    0x00000000c7de95cb, 0x00000000c79fb541, 0x00000000c760b5ee,
191    0x00000000c72197dc, 0x00000000c6e25b15, 0x00000000c6a2ffa3,
192    0x00000000c663858f, 0x00000000c623ece2, 0x00000000c5e435a8,
193    0x00000000c5a45fe9,
194    0x00000000c5646bb0, 0x00000000c5245906, 0x00000000c4e427f6,
195    0x00000000c4a3d888, 0x00000000c4636ac8, 0x00000000c422debf,
196    0x00000000c3e23476, 0x00000000c3a16bf9, 0x00000000c3608550,
197    0x00000000c31f8087,
198    0x00000000c2de5da6, 0x00000000c29d1cb8, 0x00000000c25bbdc8,
199    0x00000000c21a40de, 0x00000000c1d8a606, 0x00000000c196ed49,
200    0x00000000c15516b2, 0x00000000c113224a, 0x00000000c0d1101d,
201    0x00000000c08ee033,
202    0x00000000c04c9297, 0x00000000c00a2754, 0x00000000bfc79e73,
203    0x00000000bf84f800, 0x00000000bf423404, 0x00000000beff5289,
204    0x00000000bebc539a, 0x00000000be793741, 0x00000000be35fd89,
205    0x00000000bdf2a67b,
206    0x00000000bdaf3223, 0x00000000bd6ba08b, 0x00000000bd27f1bc,
207    0x00000000bce425c2, 0x00000000bca03ca7, 0x00000000bc5c3676,
208    0x00000000bc181338, 0x00000000bbd3d2f9, 0x00000000bb8f75c3,
209    0x00000000bb4afba1,
210    0x00000000bb06649c, 0x00000000bac1b0c0, 0x00000000ba7ce018,
211    0x00000000ba37f2ad, 0x00000000b9f2e88b, 0x00000000b9adc1bc,
212    0x00000000b9687e4a, 0x00000000b9231e41, 0x00000000b8dda1ac,
213    0x00000000b8980894,
214    0x00000000b8525305, 0x00000000b80c8109, 0x00000000b7c692ac,
215    0x00000000b78087f7, 0x00000000b73a60f6, 0x00000000b6f41db4,
216    0x00000000b6adbe3a, 0x00000000b6674296, 0x00000000b620aad0,
217    0x00000000b5d9f6f4,
218    0x00000000b593270e, 0x00000000b54c3b27, 0x00000000b505334a,
219    0x00000000b4be0f84, 0x00000000b476cfde, 0x00000000b42f7464,
220    0x00000000b3e7fd20, 0x00000000b3a06a1e, 0x00000000b358bb69,
221    0x00000000b310f10c,
222    0x00000000b2c90b11, 0x00000000b2810985, 0x00000000b238ec71,
223    0x00000000b1f0b3e2, 0x00000000b1a85fe2, 0x00000000b15ff07c,
224    0x00000000b11765bc, 0x00000000b0cebfad, 0x00000000b085fe5a,
225    0x00000000b03d21ce,
226    0x00000000aff42a15, 0x00000000afab1739, 0x00000000af61e946,
227    0x00000000af18a048, 0x00000000aecf3c49, 0x00000000ae85bd55,
228    0x00000000ae3c2377, 0x00000000adf26ebb, 0x00000000ada89f2c,
229    0x00000000ad5eb4d5,
230    0x00000000ad14afc2, 0x00000000acca8ffd, 0x00000000ac805594,
231    0x00000000ac360090, 0x00000000abeb90fe, 0x00000000aba106e9,
232    0x00000000ab56625d, 0x00000000ab0ba364, 0x00000000aac0ca0b,
233    0x00000000aa75d65d,
234    0x00000000aa2ac865, 0x00000000a9dfa030, 0x00000000a9945dc9,
235    0x00000000a949013a, 0x00000000a8fd8a91, 0x00000000a8b1f9d8,
236    0x00000000a8664f1c, 0x00000000a81a8a68, 0x00000000a7ceabc7,
237    0x00000000a782b345,
238    0x00000000a736a0ef, 0x00000000a6ea74cf, 0x00000000a69e2ef2,
239    0x00000000a651cf63, 0x00000000a605562f, 0x00000000a5b8c360,
240    0x00000000a56c1702, 0x00000000a51f5123, 0x00000000a4d271cc,
241    0x00000000a485790b,
242    0x00000000a43866eb, 0x00000000a3eb3b77, 0x00000000a39df6bd,
243    0x00000000a35098c7, 0x00000000a30321a2, 0x00000000a2b5915a,
244    0x00000000a267e7fa, 0x00000000a21a258e, 0x00000000a1cc4a24,
245    0x00000000a17e55c5,
246    0x00000000a1304880, 0x00000000a0e2225f, 0x00000000a093e36f,
247    0x00000000a0458bbb, 0x000000009ff71b50, 0x000000009fa8923a,
248    0x000000009f59f086, 0x000000009f0b363e, 0x000000009ebc6370,
249    0x000000009e6d7827,
250    0x000000009e1e746f, 0x000000009dcf5856, 0x000000009d8023e6,
251    0x000000009d30d72d, 0x000000009ce17236, 0x000000009c91f50e,
252    0x000000009c425fc1, 0x000000009bf2b25b, 0x000000009ba2ece8,
253    0x000000009b530f76,
254    0x000000009b031a0f, 0x000000009ab30cc1, 0x000000009a62e797,
255    0x000000009a12aa9f, 0x0000000099c255e5, 0x000000009971e974,
256    0x000000009921655a, 0x0000000098d0c9a2, 0x0000000098801659,
257    0x00000000982f4b8d,
258    0x0000000097de6948, 0x00000000978d6f97, 0x00000000973c5e88,
259    0x0000000096eb3626, 0x000000009699f67f, 0x0000000096489f9e,
260    0x0000000095f73190, 0x0000000095a5ac61, 0x000000009554101f,
261    0x0000000095025cd6,
262    0x0000000094b09292, 0x00000000945eb161, 0x00000000940cb94e,
263    0x0000000093baaa66, 0x00000000936884b6, 0x000000009316484b,
264    0x0000000092c3f531, 0x0000000092718b75, 0x00000000921f0b24,
265    0x0000000091cc744b,
266    0x000000009179c6f5, 0x0000000091270331, 0x0000000090d4290a,
267    0x000000009081388e, 0x00000000902e31c8, 0x000000008fdb14c7,
268    0x000000008f87e197, 0x000000008f349845, 0x000000008ee138dd,
269    0x000000008e8dc36c,
270    0x000000008e3a3800, 0x000000008de696a5, 0x000000008d92df68,
271    0x000000008d3f1256, 0x000000008ceb2f7c, 0x000000008c9736e7,
272    0x000000008c4328a3, 0x000000008bef04bf, 0x000000008b9acb46,
273    0x000000008b467c45,
274    0x000000008af217cb, 0x000000008a9d9de3, 0x000000008a490e9b,
275    0x0000000089f469ff, 0x00000000899fb01e, 0x00000000894ae103,
276    0x0000000088f5fcbc, 0x0000000088a10357, 0x00000000884bf4df,
277    0x0000000087f6d163,
278    0x0000000087a198f0, 0x00000000874c4b92, 0x0000000086f6e956,
279    0x0000000086a1724b, 0x00000000864be67c, 0x0000000085f645f8,
280    0x0000000085a090cc, 0x00000000854ac704, 0x0000000084f4e8ad,
281    0x00000000849ef5d7,
282    0x000000008448ee8c, 0x0000000083f2d2db, 0x00000000839ca2d1,
283    0x0000000083465e7c, 0x0000000082f005e8, 0x0000000082999922,
284    0x0000000082431839, 0x0000000081ec833a, 0x000000008195da31,
285    0x00000000813f1d2d,
286    0x0000000080e84c3a, 0x0000000080916766, 0x00000000803a6ebf,
287    0x000000007fe36251, 0x000000007f8c422b, 0x000000007f350e59,
288    0x000000007eddc6ea, 0x000000007e866bea, 0x000000007e2efd67,
289    0x000000007dd77b6f,
290    0x000000007d7fe60f, 0x000000007d283d54, 0x000000007cd0814c,
291    0x000000007c78b205, 0x000000007c20cf8c, 0x000000007bc8d9ef,
292    0x000000007b70d13b, 0x000000007b18b57e, 0x000000007ac086c5,
293    0x000000007a68451f,
294    0x000000007a0ff098, 0x0000000079b7893e, 0x00000000795f0f1f,
295    0x0000000079068248, 0x0000000078ade2c8, 0x00000000785530ab,
296    0x0000000077fc6c01, 0x0000000077a394d5, 0x00000000774aab36,
297    0x0000000076f1af32,
298    0x000000007698a0d6, 0x00000000763f8030, 0x0000000075e64d4e,
299    0x00000000758d083e, 0x000000007533b10d, 0x0000000074da47c9,
300    0x000000007480cc80, 0x0000000074273f3f, 0x0000000073cda016,
301    0x000000007373ef10,
302    0x00000000731a2c3d, 0x0000000072c057aa, 0x0000000072667164,
303    0x00000000720c797a, 0x0000000071b26ffa, 0x00000000715854f2,
304    0x0000000070fe286e, 0x0000000070a3ea7e, 0x0000000070499b30,
305    0x000000006fef3a90,
306    0x000000006f94c8ae, 0x000000006f3a4596, 0x000000006edfb157,
307    0x000000006e850c00, 0x000000006e2a559d, 0x000000006dcf8e3d,
308    0x000000006d74b5ee, 0x000000006d19ccbe, 0x000000006cbed2bb,
309    0x000000006c63c7f3,
310    0x000000006c08ac74, 0x000000006bad804c, 0x000000006b524389,
311    0x000000006af6f639, 0x000000006a9b986b, 0x000000006a402a2c,
312    0x0000000069e4ab8a, 0x0000000069891c94, 0x00000000692d7d57,
313    0x0000000068d1cde3,
314    0x0000000068760e44, 0x00000000681a3e89, 0x0000000067be5ec1,
315    0x0000000067626ef9, 0x0000000067066f40, 0x0000000066aa5fa3,
316    0x00000000664e4032, 0x0000000065f210f9, 0x000000006595d209,
317    0x000000006539836d,
318    0x0000000064dd2536, 0x000000006480b770, 0x0000000064243a2b,
319    0x0000000063c7ad75, 0x00000000636b115c, 0x00000000630e65ed,
320    0x0000000062b1ab39, 0x000000006254e14c, 0x0000000061f80835,
321    0x00000000619b2002,
322    0x00000000613e28c2, 0x0000000060e12283, 0x0000000060840d54,
323    0x000000006026e943, 0x000000005fc9b65d, 0x000000005f6c74b2,
324    0x000000005f0f2450, 0x000000005eb1c545, 0x000000005e5457a0,
325    0x000000005df6db6f,
326    0x000000005d9950c0, 0x000000005d3bb7a3, 0x000000005cde1024,
327    0x000000005c805a54, 0x000000005c22963f, 0x000000005bc4c3f6,
328    0x000000005b66e385, 0x000000005b08f4fd, 0x000000005aaaf86a,
329    0x000000005a4ceddc,
330    0x0000000059eed561, 0x000000005990af08, 0x0000000059327adf,
331    0x0000000058d438f4, 0x000000005875e957, 0x0000000058178c16,
332    0x0000000057b9213f, 0x00000000575aa8e0, 0x0000000056fc230a,
333    0x00000000569d8fc9,
334    0x00000000563eef2d, 0x0000000055e04144, 0x000000005581861d,
335    0x000000005522bdc6, 0x0000000054c3e84e, 0x00000000546505c4,
336    0x0000000054061636, 0x0000000053a719b3, 0x000000005348104a,
337    0x0000000052e8fa09,
338    0x000000005289d6ff, 0x00000000522aa73a, 0x0000000051cb6aca,
339    0x00000000516c21bc, 0x00000000510ccc20, 0x0000000050ad6a05,
340    0x00000000504dfb78, 0x000000004fee808a, 0x000000004f8ef947,
341    0x000000004f2f65c0,
342    0x000000004ecfc603, 0x000000004e701a1f, 0x000000004e106222,
343    0x000000004db09e1b, 0x000000004d50ce19, 0x000000004cf0f22b,
344    0x000000004c910a5f, 0x000000004c3116c5, 0x000000004bd1176b,
345    0x000000004b710c5f,
346    0x000000004b10f5b2, 0x000000004ab0d371, 0x000000004a50a5ab,
347    0x0000000049f06c70, 0x00000000499027cd, 0x00000000492fd7d3,
348    0x0000000048cf7c8f, 0x00000000486f1611, 0x00000000480ea467,
349    0x0000000047ae27a1,
350    0x00000000474d9fcd, 0x0000000046ed0cfa, 0x00000000468c6f37,
351    0x00000000462bc693, 0x0000000045cb131c, 0x00000000456a54e3,
352    0x0000000045098bf5, 0x0000000044a8b861, 0x000000004447da37,
353    0x0000000043e6f186,
354    0x000000004385fe5c, 0x00000000432500c8, 0x0000000042c3f8d9,
355    0x000000004262e69f, 0x000000004201ca28, 0x0000000041a0a383,
356    0x00000000413f72bf, 0x0000000040de37eb, 0x00000000407cf317,
357    0x00000000401ba450,
358    0x000000003fba4ba7, 0x000000003f58e92a, 0x000000003ef77ce8,
359    0x000000003e9606f1, 0x000000003e348752, 0x000000003dd2fe1c,
360    0x000000003d716b5e, 0x000000003d0fcf25, 0x000000003cae2982,
361    0x000000003c4c7a83,
362    0x000000003beac238, 0x000000003b8900b0, 0x000000003b2735f9,
363    0x000000003ac56223, 0x000000003a63853d, 0x000000003a019f56,
364    0x00000000399fb07d, 0x00000000393db8c1, 0x0000000038dbb831,
365    0x000000003879aedd,
366    0x0000000038179cd3, 0x0000000037b58222, 0x0000000037535edb,
367    0x0000000036f1330b, 0x00000000368efec2, 0x00000000362cc20f,
368    0x0000000035ca7d02, 0x0000000035682fa9, 0x000000003505da14,
369    0x0000000034a37c51,
370    0x0000000034411671, 0x0000000033dea881, 0x00000000337c3292,
371    0x000000003319b4b3, 0x0000000032b72ef2, 0x000000003254a15e,
372    0x0000000031f20c08, 0x00000000318f6efe, 0x00000000312cca50,
373    0x0000000030ca1e0c,
374    0x0000000030676a43, 0x000000003004af02, 0x000000002fa1ec5a,
375    0x000000002f3f2259, 0x000000002edc510f, 0x000000002e79788b,
376    0x000000002e1698dc, 0x000000002db3b212, 0x000000002d50c43c,
377    0x000000002cedcf68,
378    0x000000002c8ad3a7, 0x000000002c27d108, 0x000000002bc4c799,
379    0x000000002b61b76b, 0x000000002afea08c, 0x000000002a9b830b,
380    0x000000002a385ef9, 0x0000000029d53464, 0x000000002972035b,
381    0x00000000290ecbee,
382    0x0000000028ab8e2c, 0x0000000028484a25, 0x0000000027e4ffe7,
383    0x000000002781af83, 0x00000000271e5906, 0x0000000026bafc82,
384    0x0000000026579a04, 0x0000000025f4319d, 0x000000002590c35c,
385    0x00000000252d4f4f,
386    0x0000000024c9d587, 0x0000000024665613, 0x000000002402d101,
387    0x00000000239f4662, 0x00000000233bb644, 0x0000000022d820b8,
388    0x00000000227485cc, 0x000000002210e590, 0x0000000021ad4013,
389    0x0000000021499565,
390    0x0000000020e5e594, 0x00000000208230b1, 0x00000000201e76ca,
391    0x000000001fbab7ef, 0x000000001f56f430, 0x000000001ef32b9b,
392    0x000000001e8f5e41, 0x000000001e2b8c30, 0x000000001dc7b578,
393    0x000000001d63da29,
394    0x000000001cfffa51, 0x000000001c9c1600, 0x000000001c382d46,
395    0x000000001bd44032, 0x000000001b704ed3, 0x000000001b0c5939,
396    0x000000001aa85f74, 0x000000001a446191, 0x0000000019e05fa2,
397    0x00000000197c59b5,
398    0x0000000019184fdb, 0x0000000018b44221, 0x0000000018503098,
399    0x0000000017ec1b50, 0x0000000017880257, 0x000000001723e5bd,
400    0x0000000016bfc591, 0x00000000165ba1e4, 0x0000000015f77ac3,
401    0x0000000015935040,
402    0x00000000152f2269, 0x0000000014caf14d, 0x000000001466bcfd,
403    0x0000000014028587, 0x00000000139e4afb, 0x00000000133a0d69,
404    0x0000000012d5cce0, 0x000000001271896f, 0x00000000120d4326,
405    0x0000000011a8fa15,
406    0x000000001144ae4a, 0x0000000010e05fd6, 0x00000000107c0ec7,
407    0x000000001017bb2d, 0x000000000fb36519, 0x000000000f4f0c98,
408    0x000000000eeab1bb, 0x000000000e865491, 0x000000000e21f52a,
409    0x000000000dbd9395,
410    0x000000000d592fe1, 0x000000000cf4ca1f, 0x000000000c90625c,
411    0x000000000c2bf8aa, 0x000000000bc78d18, 0x000000000b631fb4,
412    0x000000000afeb08f, 0x000000000a9a3fb8, 0x000000000a35cd3e,
413    0x0000000009d15931,
414    0x00000000096ce3a1, 0x0000000009086c9c, 0x0000000008a3f433,
415    0x00000000083f7a75, 0x0000000007daff71, 0x0000000007768337,
416    0x00000000071205d6, 0x0000000006ad875f, 0x00000000064907df,
417    0x0000000005e48768,
418    0x0000000005800608, 0x00000000051b83cf, 0x0000000004b700cc,
419    0x0000000004527d0f, 0x0000000003edf8a7, 0x00000000038973a4,
420    0x000000000324ee16, 0x0000000002c0680b, 0x00000000025be194,
421    0x0000000001f75ac0,
422    0x000000000192d39e, 0x00000000012e4c3e, 0x0000000000c9c4af,
423    0x0000000000653d02, 0x0000000000000000
424 };
425
426 EAPI Eina_F32p32
427 eina_f32p32_cos(Eina_F32p32 a)
428 {
429    Eina_F32p32 F32P32_2PI;
430    Eina_F32p32 F32P32_PI2;
431    Eina_F32p32 F32P32_3PI2;
432    Eina_F32p32 remainder_2PI;
433    Eina_F32p32 remainder_PI;
434    Eina_F32p32 interpol;
435    Eina_F32p32 result;
436    int idx;
437    int index2;
438
439    F32P32_2PI = EINA_F32P32_PI << 1;
440    F32P32_PI2 = EINA_F32P32_PI >> 1;
441    F32P32_3PI2 = EINA_F32P32_PI + F32P32_PI2;
442
443    /* Take advantage of cosinus symetrie. */
444    a = eina_fp32p32_llabs(a);
445
446    /* Find table entry in 0 to PI / 2 */
447    remainder_PI = a - (a / EINA_F32P32_PI) * EINA_F32P32_PI;
448
449    /* Find which case from 0 to 2 * PI */
450    remainder_2PI = a - (a / F32P32_2PI) * F32P32_2PI;
451
452    interpol = eina_f32p32_div(eina_f32p32_scale(remainder_PI, (MAX_PREC - 1) * 2),
453                               EINA_F32P32_PI);
454    idx = eina_f32p32_int_to(interpol);
455    if (idx >= MAX_PREC)
456       idx = 2 * MAX_PREC - (idx + 1);
457
458    index2 = idx + 1;
459    if (index2 == MAX_PREC)
460       index2 = idx - 1;
461
462    result = eina_f32p32_add(eina_trigo[idx],
463                             eina_f32p32_mul(eina_f32p32_sub(eina_trigo[idx],
464                                                             eina_trigo[index2]),
465                                             (Eina_F32p32)eina_f32p32_fracc_get(
466                                                interpol)));
467
468    if (F32P32_PI2 < remainder_2PI && remainder_2PI < F32P32_3PI2)
469      result *= -1;
470
471    return result;
472 }
473
474 EAPI Eina_F32p32
475 eina_f32p32_sin(Eina_F32p32 a)
476 {
477    Eina_F32p32 F32P32_PI2;
478
479    F32P32_PI2 = EINA_F32P32_PI >> 1;
480
481    /* We only have a table for cosinus, but sin(a) = cos(pi / 2 - a) */
482    a = eina_f32p32_sub(F32P32_PI2, a);
483
484    return eina_f32p32_cos(a);
485 }
486