ReactOS 0.4.16-dev-2104-gb84fa49
mathf.c File Reference
#include <corecrt.h>
#include <wine/asm.h>
Include dependency graph for mathf.c:

Go to the source code of this file.

Functions

double __cdecl sin (double)
 
double __cdecl cos (double)
 
double __cdecl tan (double)
 
double __cdecl atan2 (double, double)
 
double __cdecl exp (double)
 
double __cdecl log (double)
 
double __cdecl pow (double, double)
 
double __cdecl sqrt (double)
 
double __cdecl floor (double)
 
double __cdecl ceil (double)
 
float __cdecl powf (float, float)
 
double exp2 (double x)
 
float exp2f (float x)
 

Function Documentation

◆ atan2()

double __cdecl atan2 ( double  y,
double  x 
)

Definition at line 52 of file atan2.c.

53{
54 /* Arrays atan_jby256_lead and atan_jby256_tail contain
55 leading and trailing parts respectively of precomputed
56 values of atan(j/256), for j = 16, 17, ..., 256.
57 atan_jby256_lead contains the first 21 bits of precision,
58 and atan_jby256_tail contains a further 53 bits precision. */
59
60 static const double atan_jby256_lead[ 241] = {
61 6.24187886714935302734e-02, /* 0x3faff55b00000000 */
62 6.63088560104370117188e-02, /* 0x3fb0f99e00000000 */
63 7.01969265937805175781e-02, /* 0x3fb1f86d00000000 */
64 7.40829110145568847656e-02, /* 0x3fb2f71900000000 */
65 7.79666304588317871094e-02, /* 0x3fb3f59f00000000 */
66 8.18479657173156738281e-02, /* 0x3fb4f3fd00000000 */
67 8.57268571853637695312e-02, /* 0x3fb5f23200000000 */
68 8.96031260490417480469e-02, /* 0x3fb6f03b00000000 */
69 9.34767723083496093750e-02, /* 0x3fb7ee1800000000 */
70 9.73475575447082519531e-02, /* 0x3fb8ebc500000000 */
71 1.01215422153472900391e-01, /* 0x3fb9e94100000000 */
72 1.05080246925354003906e-01, /* 0x3fbae68a00000000 */
73 1.08941912651062011719e-01, /* 0x3fbbe39e00000000 */
74 1.12800359725952148438e-01, /* 0x3fbce07c00000000 */
75 1.16655409336090087891e-01, /* 0x3fbddd2100000000 */
76 1.20507001876831054688e-01, /* 0x3fbed98c00000000 */
77 1.24354958534240722656e-01, /* 0x3fbfd5ba00000000 */
78 1.28199219703674316406e-01, /* 0x3fc068d500000000 */
79 1.32039666175842285156e-01, /* 0x3fc0e6ad00000000 */
80 1.35876297950744628906e-01, /* 0x3fc1646500000000 */
81 1.39708757400512695312e-01, /* 0x3fc1e1fa00000000 */
82 1.43537282943725585938e-01, /* 0x3fc25f6e00000000 */
83 1.47361397743225097656e-01, /* 0x3fc2dcbd00000000 */
84 1.51181221008300781250e-01, /* 0x3fc359e800000000 */
85 1.54996633529663085938e-01, /* 0x3fc3d6ee00000000 */
86 1.58807516098022460938e-01, /* 0x3fc453ce00000000 */
87 1.62613749504089355469e-01, /* 0x3fc4d08700000000 */
88 1.66415214538574218750e-01, /* 0x3fc54d1800000000 */
89 1.70211911201477050781e-01, /* 0x3fc5c98100000000 */
90 1.74003481864929199219e-01, /* 0x3fc645bf00000000 */
91 1.77790164947509765625e-01, /* 0x3fc6c1d400000000 */
92 1.81571602821350097656e-01, /* 0x3fc73dbd00000000 */
93 1.85347914695739746094e-01, /* 0x3fc7b97b00000000 */
94 1.89118742942810058594e-01, /* 0x3fc8350b00000000 */
95 1.92884206771850585938e-01, /* 0x3fc8b06e00000000 */
96 1.96644186973571777344e-01, /* 0x3fc92ba300000000 */
97 2.00398445129394531250e-01, /* 0x3fc9a6a800000000 */
98 2.04147100448608398438e-01, /* 0x3fca217e00000000 */
99 2.07889914512634277344e-01, /* 0x3fca9c2300000000 */
100 2.11626768112182617188e-01, /* 0x3fcb169600000000 */
101 2.15357661247253417969e-01, /* 0x3fcb90d700000000 */
102 2.19082474708557128906e-01, /* 0x3fcc0ae500000000 */
103 2.22801089286804199219e-01, /* 0x3fcc84bf00000000 */
104 2.26513504981994628906e-01, /* 0x3fccfe6500000000 */
105 2.30219483375549316406e-01, /* 0x3fcd77d500000000 */
106 2.33919143676757812500e-01, /* 0x3fcdf11000000000 */
107 2.37612247467041015625e-01, /* 0x3fce6a1400000000 */
108 2.41298794746398925781e-01, /* 0x3fcee2e100000000 */
109 2.44978547096252441406e-01, /* 0x3fcf5b7500000000 */
110 2.48651623725891113281e-01, /* 0x3fcfd3d100000000 */
111 2.52317905426025390625e-01, /* 0x3fd025fa00000000 */
112 2.55977153778076171875e-01, /* 0x3fd061ee00000000 */
113 2.59629487991333007812e-01, /* 0x3fd09dc500000000 */
114 2.63274669647216796875e-01, /* 0x3fd0d97e00000000 */
115 2.66912937164306640625e-01, /* 0x3fd1151a00000000 */
116 2.70543813705444335938e-01, /* 0x3fd1509700000000 */
117 2.74167299270629882812e-01, /* 0x3fd18bf500000000 */
118 2.77783632278442382812e-01, /* 0x3fd1c73500000000 */
119 2.81392335891723632812e-01, /* 0x3fd2025500000000 */
120 2.84993648529052734375e-01, /* 0x3fd23d5600000000 */
121 2.88587331771850585938e-01, /* 0x3fd2783700000000 */
122 2.92173147201538085938e-01, /* 0x3fd2b2f700000000 */
123 2.95751571655273437500e-01, /* 0x3fd2ed9800000000 */
124 2.99322128295898437500e-01, /* 0x3fd3281800000000 */
125 3.02884817123413085938e-01, /* 0x3fd3627700000000 */
126 3.06439399719238281250e-01, /* 0x3fd39cb400000000 */
127 3.09986352920532226562e-01, /* 0x3fd3d6d100000000 */
128 3.13524961471557617188e-01, /* 0x3fd410cb00000000 */
129 3.17055702209472656250e-01, /* 0x3fd44aa400000000 */
130 3.20578098297119140625e-01, /* 0x3fd4845a00000000 */
131 3.24092388153076171875e-01, /* 0x3fd4bdee00000000 */
132 3.27598333358764648438e-01, /* 0x3fd4f75f00000000 */
133 3.31095933914184570312e-01, /* 0x3fd530ad00000000 */
134 3.34585189819335937500e-01, /* 0x3fd569d800000000 */
135 3.38066101074218750000e-01, /* 0x3fd5a2e000000000 */
136 3.41538190841674804688e-01, /* 0x3fd5dbc300000000 */
137 3.45002174377441406250e-01, /* 0x3fd6148400000000 */
138 3.48457098007202148438e-01, /* 0x3fd64d1f00000000 */
139 3.51903676986694335938e-01, /* 0x3fd6859700000000 */
140 3.55341434478759765625e-01, /* 0x3fd6bdea00000000 */
141 3.58770608901977539062e-01, /* 0x3fd6f61900000000 */
142 3.62190723419189453125e-01, /* 0x3fd72e2200000000 */
143 3.65602254867553710938e-01, /* 0x3fd7660700000000 */
144 3.69004726409912109375e-01, /* 0x3fd79dc600000000 */
145 3.72398376464843750000e-01, /* 0x3fd7d56000000000 */
146 3.75782966613769531250e-01, /* 0x3fd80cd400000000 */
147 3.79158496856689453125e-01, /* 0x3fd8442200000000 */
148 3.82525205612182617188e-01, /* 0x3fd87b4b00000000 */
149 3.85882616043090820312e-01, /* 0x3fd8b24d00000000 */
150 3.89230966567993164062e-01, /* 0x3fd8e92900000000 */
151 3.92570018768310546875e-01, /* 0x3fd91fde00000000 */
152 3.95900011062622070312e-01, /* 0x3fd9566d00000000 */
153 3.99220705032348632812e-01, /* 0x3fd98cd500000000 */
154 4.02532100677490234375e-01, /* 0x3fd9c31600000000 */
155 4.05834197998046875000e-01, /* 0x3fd9f93000000000 */
156 4.09126996994018554688e-01, /* 0x3fda2f2300000000 */
157 4.12410259246826171875e-01, /* 0x3fda64ee00000000 */
158 4.15684223175048828125e-01, /* 0x3fda9a9200000000 */
159 4.18948888778686523438e-01, /* 0x3fdad00f00000000 */
160 4.22204017639160156250e-01, /* 0x3fdb056400000000 */
161 4.25449609756469726562e-01, /* 0x3fdb3a9100000000 */
162 4.28685665130615234375e-01, /* 0x3fdb6f9600000000 */
163 4.31912183761596679688e-01, /* 0x3fdba47300000000 */
164 4.35129165649414062500e-01, /* 0x3fdbd92800000000 */
165 4.38336372375488281250e-01, /* 0x3fdc0db400000000 */
166 4.41534280776977539062e-01, /* 0x3fdc421900000000 */
167 4.44722414016723632812e-01, /* 0x3fdc765500000000 */
168 4.47900772094726562500e-01, /* 0x3fdcaa6800000000 */
169 4.51069593429565429688e-01, /* 0x3fdcde5300000000 */
170 4.54228639602661132812e-01, /* 0x3fdd121500000000 */
171 4.57377910614013671875e-01, /* 0x3fdd45ae00000000 */
172 4.60517644882202148438e-01, /* 0x3fdd791f00000000 */
173 4.63647603988647460938e-01, /* 0x3fddac6700000000 */
174 4.66767549514770507812e-01, /* 0x3fdddf8500000000 */
175 4.69877958297729492188e-01, /* 0x3fde127b00000000 */
176 4.72978591918945312500e-01, /* 0x3fde454800000000 */
177 4.76069211959838867188e-01, /* 0x3fde77eb00000000 */
178 4.79150056838989257812e-01, /* 0x3fdeaa6500000000 */
179 4.82221126556396484375e-01, /* 0x3fdedcb600000000 */
180 4.85282421112060546875e-01, /* 0x3fdf0ede00000000 */
181 4.88333940505981445312e-01, /* 0x3fdf40dd00000000 */
182 4.91375446319580078125e-01, /* 0x3fdf72b200000000 */
183 4.94406938552856445312e-01, /* 0x3fdfa45d00000000 */
184 4.97428894042968750000e-01, /* 0x3fdfd5e000000000 */
185 5.00440597534179687500e-01, /* 0x3fe0039c00000000 */
186 5.03442764282226562500e-01, /* 0x3fe01c3400000000 */
187 5.06434917449951171875e-01, /* 0x3fe034b700000000 */
188 5.09417057037353515625e-01, /* 0x3fe04d2500000000 */
189 5.12389183044433593750e-01, /* 0x3fe0657e00000000 */
190 5.15351772308349609375e-01, /* 0x3fe07dc300000000 */
191 5.18304347991943359375e-01, /* 0x3fe095f300000000 */
192 5.21246910095214843750e-01, /* 0x3fe0ae0e00000000 */
193 5.24179458618164062500e-01, /* 0x3fe0c61400000000 */
194 5.27101993560791015625e-01, /* 0x3fe0de0500000000 */
195 5.30014991760253906250e-01, /* 0x3fe0f5e200000000 */
196 5.32917976379394531250e-01, /* 0x3fe10daa00000000 */
197 5.35810947418212890625e-01, /* 0x3fe1255d00000000 */
198 5.38693904876708984375e-01, /* 0x3fe13cfb00000000 */
199 5.41567325592041015625e-01, /* 0x3fe1548500000000 */
200 5.44430732727050781250e-01, /* 0x3fe16bfa00000000 */
201 5.47284126281738281250e-01, /* 0x3fe1835a00000000 */
202 5.50127506256103515625e-01, /* 0x3fe19aa500000000 */
203 5.52961349487304687500e-01, /* 0x3fe1b1dc00000000 */
204 5.55785179138183593750e-01, /* 0x3fe1c8fe00000000 */
205 5.58598995208740234375e-01, /* 0x3fe1e00b00000000 */
206 5.61403274536132812500e-01, /* 0x3fe1f70400000000 */
207 5.64197540283203125000e-01, /* 0x3fe20de800000000 */
208 5.66981792449951171875e-01, /* 0x3fe224b700000000 */
209 5.69756031036376953125e-01, /* 0x3fe23b7100000000 */
210 5.72520732879638671875e-01, /* 0x3fe2521700000000 */
211 5.75275897979736328125e-01, /* 0x3fe268a900000000 */
212 5.78021049499511718750e-01, /* 0x3fe27f2600000000 */
213 5.80756187438964843750e-01, /* 0x3fe2958e00000000 */
214 5.83481788635253906250e-01, /* 0x3fe2abe200000000 */
215 5.86197376251220703125e-01, /* 0x3fe2c22100000000 */
216 5.88903427124023437500e-01, /* 0x3fe2d84c00000000 */
217 5.91599464416503906250e-01, /* 0x3fe2ee6200000000 */
218 5.94285964965820312500e-01, /* 0x3fe3046400000000 */
219 5.96962928771972656250e-01, /* 0x3fe31a5200000000 */
220 5.99629878997802734375e-01, /* 0x3fe3302b00000000 */
221 6.02287292480468750000e-01, /* 0x3fe345f000000000 */
222 6.04934692382812500000e-01, /* 0x3fe35ba000000000 */
223 6.07573032379150390625e-01, /* 0x3fe3713d00000000 */
224 6.10201358795166015625e-01, /* 0x3fe386c500000000 */
225 6.12820148468017578125e-01, /* 0x3fe39c3900000000 */
226 6.15428924560546875000e-01, /* 0x3fe3b19800000000 */
227 6.18028640747070312500e-01, /* 0x3fe3c6e400000000 */
228 6.20618820190429687500e-01, /* 0x3fe3dc1c00000000 */
229 6.23198986053466796875e-01, /* 0x3fe3f13f00000000 */
230 6.25770092010498046875e-01, /* 0x3fe4064f00000000 */
231 6.28331184387207031250e-01, /* 0x3fe41b4a00000000 */
232 6.30883216857910156250e-01, /* 0x3fe4303200000000 */
233 6.33425712585449218750e-01, /* 0x3fe4450600000000 */
234 6.35958671569824218750e-01, /* 0x3fe459c600000000 */
235 6.38482093811035156250e-01, /* 0x3fe46e7200000000 */
236 6.40995979309082031250e-01, /* 0x3fe4830a00000000 */
237 6.43500804901123046875e-01, /* 0x3fe4978f00000000 */
238 6.45996093750000000000e-01, /* 0x3fe4ac0000000000 */
239 6.48482322692871093750e-01, /* 0x3fe4c05e00000000 */
240 6.50959014892578125000e-01, /* 0x3fe4d4a800000000 */
241 6.53426170349121093750e-01, /* 0x3fe4e8de00000000 */
242 6.55884265899658203125e-01, /* 0x3fe4fd0100000000 */
243 6.58332824707031250000e-01, /* 0x3fe5111000000000 */
244 6.60772323608398437500e-01, /* 0x3fe5250c00000000 */
245 6.63202762603759765625e-01, /* 0x3fe538f500000000 */
246 6.65623664855957031250e-01, /* 0x3fe54cca00000000 */
247 6.68035984039306640625e-01, /* 0x3fe5608d00000000 */
248 6.70438766479492187500e-01, /* 0x3fe5743c00000000 */
249 6.72832489013671875000e-01, /* 0x3fe587d800000000 */
250 6.75216674804687500000e-01, /* 0x3fe59b6000000000 */
251 6.77592277526855468750e-01, /* 0x3fe5aed600000000 */
252 6.79958820343017578125e-01, /* 0x3fe5c23900000000 */
253 6.82316303253173828125e-01, /* 0x3fe5d58900000000 */
254 6.84664726257324218750e-01, /* 0x3fe5e8c600000000 */
255 6.87004089355468750000e-01, /* 0x3fe5fbf000000000 */
256 6.89334869384765625000e-01, /* 0x3fe60f0800000000 */
257 6.91656589508056640625e-01, /* 0x3fe6220d00000000 */
258 6.93969249725341796875e-01, /* 0x3fe634ff00000000 */
259 6.96272850036621093750e-01, /* 0x3fe647de00000000 */
260 6.98567867279052734375e-01, /* 0x3fe65aab00000000 */
261 7.00854301452636718750e-01, /* 0x3fe66d6600000000 */
262 7.03131675720214843750e-01, /* 0x3fe6800e00000000 */
263 7.05400466918945312500e-01, /* 0x3fe692a400000000 */
264 7.07660198211669921875e-01, /* 0x3fe6a52700000000 */
265 7.09911346435546875000e-01, /* 0x3fe6b79800000000 */
266 7.12153911590576171875e-01, /* 0x3fe6c9f700000000 */
267 7.14387893676757812500e-01, /* 0x3fe6dc4400000000 */
268 7.16613292694091796875e-01, /* 0x3fe6ee7f00000000 */
269 7.18829631805419921875e-01, /* 0x3fe700a700000000 */
270 7.21037864685058593750e-01, /* 0x3fe712be00000000 */
271 7.23237514495849609375e-01, /* 0x3fe724c300000000 */
272 7.25428581237792968750e-01, /* 0x3fe736b600000000 */
273 7.27611064910888671875e-01, /* 0x3fe7489700000000 */
274 7.29785442352294921875e-01, /* 0x3fe75a6700000000 */
275 7.31950759887695312500e-01, /* 0x3fe76c2400000000 */
276 7.34108448028564453125e-01, /* 0x3fe77dd100000000 */
277 7.36257076263427734375e-01, /* 0x3fe78f6b00000000 */
278 7.38397598266601562500e-01, /* 0x3fe7a0f400000000 */
279 7.40530014038085937500e-01, /* 0x3fe7b26c00000000 */
280 7.42654323577880859375e-01, /* 0x3fe7c3d300000000 */
281 7.44770050048828125000e-01, /* 0x3fe7d52800000000 */
282 7.46877670288085937500e-01, /* 0x3fe7e66c00000000 */
283 7.48976707458496093750e-01, /* 0x3fe7f79e00000000 */
284 7.51068115234375000000e-01, /* 0x3fe808c000000000 */
285 7.53150939941406250000e-01, /* 0x3fe819d000000000 */
286 7.55226135253906250000e-01, /* 0x3fe82ad000000000 */
287 7.57292747497558593750e-01, /* 0x3fe83bbe00000000 */
288 7.59351730346679687500e-01, /* 0x3fe84c9c00000000 */
289 7.61402606964111328125e-01, /* 0x3fe85d6900000000 */
290 7.63445377349853515625e-01, /* 0x3fe86e2500000000 */
291 7.65480041503906250000e-01, /* 0x3fe87ed000000000 */
292 7.67507076263427734375e-01, /* 0x3fe88f6b00000000 */
293 7.69526004791259765625e-01, /* 0x3fe89ff500000000 */
294 7.71537303924560546875e-01, /* 0x3fe8b06f00000000 */
295 7.73540973663330078125e-01, /* 0x3fe8c0d900000000 */
296 7.75536537170410156250e-01, /* 0x3fe8d13200000000 */
297 7.77523994445800781250e-01, /* 0x3fe8e17a00000000 */
298 7.79504299163818359375e-01, /* 0x3fe8f1b300000000 */
299 7.81476497650146484375e-01, /* 0x3fe901db00000000 */
300 7.83441066741943359375e-01, /* 0x3fe911f300000000 */
301 7.85398006439208984375e-01}; /* 0x3fe921fb00000000 */
302
303 static const double atan_jby256_tail[ 241] = {
304 2.13244638182005395671e-08, /* 0x3e56e59fbd38db2c */
305 3.89093864761712760656e-08, /* 0x3e64e3aa54dedf96 */
306 4.44780900009437454576e-08, /* 0x3e67e105ab1bda88 */
307 1.15344768460112754160e-08, /* 0x3e48c5254d013fd0 */
308 3.37271051945395312705e-09, /* 0x3e2cf8ab3ad62670 */
309 2.40857608736109859459e-08, /* 0x3e59dca4bec80468 */
310 1.85853810450623807768e-08, /* 0x3e53f4b5ec98a8da */
311 5.14358299969225078306e-08, /* 0x3e6b9d49619d81fe */
312 8.85023985412952486748e-09, /* 0x3e43017887460934 */
313 1.59425154214358432060e-08, /* 0x3e511e3eca0b9944 */
314 1.95139937737755753164e-08, /* 0x3e54f3f73c5a332e */
315 2.64909755273544319715e-08, /* 0x3e5c71c8ae0e00a6 */
316 4.43388037881231070144e-08, /* 0x3e67cde0f86fbdc7 */
317 2.14757072421821274557e-08, /* 0x3e570f328c889c72 */
318 2.61049792670754218852e-08, /* 0x3e5c07ae9b994efe */
319 7.81439350674466302231e-09, /* 0x3e40c8021d7b1698 */
320 3.60125207123751024094e-08, /* 0x3e635585edb8cb22 */
321 6.15276238179343767917e-08, /* 0x3e70842567b30e96 */
322 9.54387964641184285058e-08, /* 0x3e799e811031472e */
323 3.02789566851502754129e-08, /* 0x3e6041821416bcee */
324 1.16888650949870856331e-07, /* 0x3e7f6086e4dc96f4 */
325 1.07580956468653338863e-08, /* 0x3e471a535c5f1b58 */
326 8.33454265379535427653e-08, /* 0x3e765f743fe63ca1 */
327 1.10790279272629526068e-07, /* 0x3e7dbd733472d014 */
328 1.08394277896366207424e-07, /* 0x3e7d18cc4d8b0d1d */
329 9.22176086126841098800e-08, /* 0x3e78c12553c8fb29 */
330 7.90938592199048786990e-08, /* 0x3e753b49e2e8f991 */
331 8.66445407164293125637e-08, /* 0x3e77422ae148c141 */
332 1.40839973537092438671e-08, /* 0x3e4e3ec269df56a8 */
333 1.19070438507307600689e-07, /* 0x3e7ff6754e7e0ac9 */
334 6.40451663051716197071e-08, /* 0x3e7131267b1b5aad */
335 1.08338682076343674522e-07, /* 0x3e7d14fa403a94bc */
336 3.52999550187922736222e-08, /* 0x3e62f396c089a3d8 */
337 1.05983273930043077202e-07, /* 0x3e7c731d78fa95bb */
338 1.05486124078259553339e-07, /* 0x3e7c50f385177399 */
339 5.82167732281776477773e-08, /* 0x3e6f41409c6f2c20 */
340 1.08696483983403942633e-07, /* 0x3e7d2d90c4c39ec0 */
341 4.47335086122377542835e-08, /* 0x3e680420696f2106 */
342 1.26896287162615723528e-08, /* 0x3e4b40327943a2e8 */
343 4.06534471589151404531e-08, /* 0x3e65d35e02f3d2a2 */
344 3.84504846300557026690e-08, /* 0x3e64a498288117b0 */
345 3.60715006404807269080e-08, /* 0x3e635da119afb324 */
346 6.44725903165522722801e-08, /* 0x3e714e85cdb9a908 */
347 3.63749249976409461305e-08, /* 0x3e638754e5547b9a */
348 1.03901294413833913794e-07, /* 0x3e7be40ae6ce3246 */
349 6.25379756302167880580e-08, /* 0x3e70c993b3bea7e7 */
350 6.63984302368488828029e-08, /* 0x3e71d2dd89ac3359 */
351 3.21844598971548278059e-08, /* 0x3e61476603332c46 */
352 1.16030611712765830905e-07, /* 0x3e7f25901bac55b7 */
353 1.17464622142347730134e-07, /* 0x3e7f881b7c826e28 */
354 7.54604017965808996596e-08, /* 0x3e7441996d698d20 */
355 1.49234929356206556899e-07, /* 0x3e8407ac521ea089 */
356 1.41416924523217430259e-07, /* 0x3e82fb0c6c4b1723 */
357 2.13308065617483489011e-07, /* 0x3e8ca135966a3e18 */
358 5.04230937933302320146e-08, /* 0x3e6b1218e4d646e4 */
359 5.45874922281655519035e-08, /* 0x3e6d4e72a350d288 */
360 1.51849028914786868886e-07, /* 0x3e84617e2f04c329 */
361 3.09004308703769273010e-08, /* 0x3e6096ec41e82650 */
362 9.67574548184738317664e-08, /* 0x3e79f91f25773e6e */
363 4.02508285529322212824e-08, /* 0x3e659c0820f1d674 */
364 3.01222268096861091157e-08, /* 0x3e602bf7a2df1064 */
365 2.36189860670079288680e-07, /* 0x3e8fb36bfc40508f */
366 1.14095158111080887695e-07, /* 0x3e7ea08f3f8dc892 */
367 7.42349089746573467487e-08, /* 0x3e73ed6254656a0e */
368 5.12515583196230380184e-08, /* 0x3e6b83f5e5e69c58 */
369 2.19290391828763918102e-07, /* 0x3e8d6ec2af768592 */
370 3.83263512187553886471e-08, /* 0x3e6493889a226f94 */
371 1.61513486284090523855e-07, /* 0x3e85ad8fa65279ba */
372 5.09996743535589922261e-08, /* 0x3e6b615784d45434 */
373 1.23694037861246766534e-07, /* 0x3e809a184368f145 */
374 8.23367955351123783984e-08, /* 0x3e761a2439b0d91c */
375 1.07591766213053694014e-07, /* 0x3e7ce1a65e39a978 */
376 1.42789947524631815640e-07, /* 0x3e832a39a93b6a66 */
377 1.32347123024711878538e-07, /* 0x3e81c3699af804e7 */
378 2.17626067316598149229e-08, /* 0x3e575e0f4e44ede8 */
379 2.34454866923044288656e-07, /* 0x3e8f77ced1a7a83b */
380 2.82966370261766916053e-09, /* 0x3e284e7f0cb1b500 */
381 2.29300919890907632975e-07, /* 0x3e8ec6b838b02dfe */
382 1.48428270450261284915e-07, /* 0x3e83ebf4dfbeda87 */
383 1.87937408574313982512e-07, /* 0x3e89397aed9cb475 */
384 6.13685946813334055347e-08, /* 0x3e707937bc239c54 */
385 1.98585022733583817493e-07, /* 0x3e8aa754553131b6 */
386 7.68394131623752961662e-08, /* 0x3e74a05d407c45dc */
387 1.28119052312436745644e-07, /* 0x3e8132231a206dd0 */
388 7.02119104719236502733e-08, /* 0x3e72d8ecfdd69c88 */
389 9.87954793820636301943e-08, /* 0x3e7a852c74218606 */
390 1.72176752381034986217e-07, /* 0x3e871bf2baeebb50 */
391 1.12877225146169704119e-08, /* 0x3e483d7db7491820 */
392 5.33549829555851737993e-08, /* 0x3e6ca50d92b6da14 */
393 2.13833275710816521345e-08, /* 0x3e56f5cde8530298 */
394 1.16243518048290556393e-07, /* 0x3e7f343198910740 */
395 6.29926408369055877943e-08, /* 0x3e70e8d241ccd80a */
396 6.45429039328021963791e-08, /* 0x3e71535ac619e6c8 */
397 8.64001922814281933403e-08, /* 0x3e77316041c36cd2 */
398 9.50767572202325800240e-08, /* 0x3e7985a000637d8e */
399 5.80851497508121135975e-08, /* 0x3e6f2f29858c0a68 */
400 1.82350561135024766232e-07, /* 0x3e8879847f96d909 */
401 1.98948680587390608655e-07, /* 0x3e8ab3d319e12e42 */
402 7.83548663450197659846e-08, /* 0x3e75088162dfc4c2 */
403 3.04374234486798594427e-08, /* 0x3e605749a1cd9d8c */
404 2.76135725629797411787e-08, /* 0x3e5da65c6c6b8618 */
405 4.32610105454203065470e-08, /* 0x3e6739bf7df1ad64 */
406 5.17107515324127256994e-08, /* 0x3e6bc31252aa3340 */
407 2.82398327875841444660e-08, /* 0x3e5e528191ad3aa8 */
408 1.87482469524195595399e-07, /* 0x3e8929d93df19f18 */
409 2.97481891662714096139e-08, /* 0x3e5ff11eb693a080 */
410 9.94421570843584316402e-09, /* 0x3e455ae3f145a3a0 */
411 1.07056210730391848428e-07, /* 0x3e7cbcd8c6c0ca82 */
412 6.25589580466881163081e-08, /* 0x3e70cb04d425d304 */
413 9.56641013869464593803e-08, /* 0x3e79adfcab5be678 */
414 1.88056307148355440276e-07, /* 0x3e893d90c5662508 */
415 8.38850689379557880950e-08, /* 0x3e768489bd35ff40 */
416 5.01215865527674122924e-09, /* 0x3e3586ed3da2b7e0 */
417 1.74166095998522089762e-07, /* 0x3e87604d2e850eee */
418 9.96779574395363585849e-08, /* 0x3e7ac1d12bfb53d8 */
419 5.98432026368321460686e-09, /* 0x3e39b3d468274740 */
420 1.18362922366887577169e-07, /* 0x3e7fc5d68d10e53c */
421 1.86086833284154215946e-07, /* 0x3e88f9e51884becb */
422 1.97671457251348941011e-07, /* 0x3e8a87f0869c06d1 */
423 1.42447160717199237159e-07, /* 0x3e831e7279f685fa */
424 1.05504240785546574184e-08, /* 0x3e46a8282f9719b0 */
425 3.13335218371639189324e-08, /* 0x3e60d2724a8a44e0 */
426 1.96518418901914535399e-07, /* 0x3e8a60524b11ad4e */
427 2.17692035039173536059e-08, /* 0x3e575fdf832750f0 */
428 2.15613114426529981675e-07, /* 0x3e8cf06902e4cd36 */
429 5.68271098300441214948e-08, /* 0x3e6e82422d4f6d10 */
430 1.70331455823369124256e-08, /* 0x3e524a091063e6c0 */
431 9.17590028095709583247e-08, /* 0x3e78a1a172dc6f38 */
432 2.77266304112916566247e-07, /* 0x3e929b6619f8a92d */
433 9.37041937614656939690e-08, /* 0x3e79274d9c1b70c8 */
434 1.56116346368316796511e-08, /* 0x3e50c34b1fbb7930 */
435 4.13967433808382727413e-08, /* 0x3e6639866c20eb50 */
436 1.70164749185821616276e-07, /* 0x3e86d6d0f6832e9e */
437 4.01708788545600086008e-07, /* 0x3e9af54def99f25e */
438 2.59663539226050551563e-07, /* 0x3e916cfc52a00262 */
439 2.22007487655027469542e-07, /* 0x3e8dcc1e83569c32 */
440 2.90542250809644081369e-07, /* 0x3e937f7a551ed425 */
441 4.67720537666628903341e-07, /* 0x3e9f6360adc98887 */
442 2.79799803956772554802e-07, /* 0x3e92c6ec8d35a2c1 */
443 2.07344552327432547723e-07, /* 0x3e8bd44df84cb036 */
444 2.54705698692735196368e-07, /* 0x3e9117cf826e310e */
445 4.26848589539548450728e-07, /* 0x3e9ca533f332cfc9 */
446 2.52506723633552216197e-07, /* 0x3e90f208509dbc2e */
447 2.14684129933849704964e-07, /* 0x3e8cd07d93c945de */
448 3.20134822201596505431e-07, /* 0x3e957bdfd67e6d72 */
449 9.93537565749855712134e-08, /* 0x3e7aab89c516c658 */
450 3.70792944827917252327e-08, /* 0x3e63e823b1a1b8a0 */
451 1.41772749369083698972e-07, /* 0x3e8307464a9d6d3c */
452 4.22446601490198804306e-07, /* 0x3e9c5993cd438843 */
453 4.11818433724801511540e-07, /* 0x3e9ba2fca02ab554 */
454 1.19976381502605310519e-07, /* 0x3e801a5b6983a268 */
455 3.43703078571520905265e-08, /* 0x3e6273d1b350efc8 */
456 1.66128705555453270379e-07, /* 0x3e864c238c37b0c6 */
457 5.00499610023283006540e-08, /* 0x3e6aded07370a300 */
458 1.75105139941208062123e-07, /* 0x3e878091197eb47e */
459 7.70807146729030327334e-08, /* 0x3e74b0f245e0dabc */
460 2.45918607526895836121e-07, /* 0x3e9080d9794e2eaf */
461 2.18359020958626199345e-07, /* 0x3e8d4ec242b60c76 */
462 8.44342887976445333569e-09, /* 0x3e4221d2f940caa0 */
463 1.07506148687888629299e-07, /* 0x3e7cdbc42b2bba5c */
464 5.36544954316820904572e-08, /* 0x3e6cce37bb440840 */
465 3.39109101518396596341e-07, /* 0x3e96c1d999cf1dd0 */
466 2.60098720293920613340e-08, /* 0x3e5bed8a07eb0870 */
467 8.42678991664621455827e-08, /* 0x3e769ed88f490e3c */
468 5.36972237470183633197e-08, /* 0x3e6cd41719b73ef0 */
469 4.28192558171921681288e-07, /* 0x3e9cbc4ac95b41b7 */
470 2.71535491483955143294e-07, /* 0x3e9238f1b890f5d7 */
471 7.84094998145075780203e-08, /* 0x3e750c4282259cc4 */
472 3.43880599134117431863e-07, /* 0x3e9713d2de87b3e2 */
473 1.32878065060366481043e-07, /* 0x3e81d5a7d2255276 */
474 4.18046802627967629428e-07, /* 0x3e9c0dfd48227ac1 */
475 2.65042411765766019424e-07, /* 0x3e91c964dab76753 */
476 1.70383695347518643694e-07, /* 0x3e86de56d5704496 */
477 1.54096497259613515678e-07, /* 0x3e84aeb71fd19968 */
478 2.36543402412459813461e-07, /* 0x3e8fbf91c57b1918 */
479 4.38416350106876736790e-07, /* 0x3e9d6bef7fbe5d9a */
480 3.03892161339927775731e-07, /* 0x3e9464d3dc249066 */
481 3.31136771605664899240e-07, /* 0x3e9638e2ec4d9073 */
482 6.49494294526590682218e-08, /* 0x3e716f4a7247ea7c */
483 4.10423429887181345747e-09, /* 0x3e31a0a740f1d440 */
484 1.70831640869113847224e-07, /* 0x3e86edbb0114a33c */
485 1.10811512657909180966e-07, /* 0x3e7dbee8bf1d513c */
486 3.23677724749783611964e-07, /* 0x3e95b8bdb0248f73 */
487 3.55662734259192678528e-07, /* 0x3e97de3d3f5eac64 */
488 2.30102333489738219140e-07, /* 0x3e8ee24187ae448a */
489 4.47429004000738629714e-07, /* 0x3e9e06c591ec5192 */
490 7.78167135617329598659e-08, /* 0x3e74e3861a332738 */
491 9.90345291908535415737e-08, /* 0x3e7a9599dcc2bfe4 */
492 5.85800913143113728314e-08, /* 0x3e6f732fbad43468 */
493 4.57859062410871843857e-07, /* 0x3e9eb9f573b727d9 */
494 3.67993069723390929794e-07, /* 0x3e98b212a2eb9897 */
495 2.90836464322977276043e-07, /* 0x3e9384884c167215 */
496 2.51621574250131388318e-07, /* 0x3e90e2d363020051 */
497 2.75789824740652815545e-07, /* 0x3e92820879fbd022 */
498 3.88985776250314403593e-07, /* 0x3e9a1ab9893e4b30 */
499 1.40214080183768019611e-07, /* 0x3e82d1b817a24478 */
500 3.23451432223550478373e-08, /* 0x3e615d7b8ded4878 */
501 9.15979180730608444470e-08, /* 0x3e78968f9db3a5e4 */
502 3.44371402498640470421e-07, /* 0x3e971c4171fe135f */
503 3.40401897215059498077e-07, /* 0x3e96d80f605d0d8c */
504 1.06431813453707950243e-07, /* 0x3e7c91f043691590 */
505 1.46204238932338846248e-07, /* 0x3e839f8a15fce2b2 */
506 9.94610376972039046878e-09, /* 0x3e455beda9d94b80 */
507 2.01711528092681771039e-07, /* 0x3e8b12c15d60949a */
508 2.72027977986191568296e-07, /* 0x3e924167b312bfe3 */
509 2.48402602511693757964e-07, /* 0x3e90ab8633070277 */
510 1.58480011219249621715e-07, /* 0x3e854554ebbc80ee */
511 3.00372828113368713281e-08, /* 0x3e60204aef5a4bb8 */
512 3.67816204583541976394e-07, /* 0x3e98af08c679cf2c */
513 2.46169793032343824291e-07, /* 0x3e90852a330ae6c8 */
514 1.70080468270204253247e-07, /* 0x3e86d3eb9ec32916 */
515 1.67806717763872914315e-07, /* 0x3e8685cb7fcbbafe */
516 2.67715622006907942620e-07, /* 0x3e91f751c1e0bd95 */
517 2.14411342550299170574e-08, /* 0x3e5705b1b0f72560 */
518 4.11228221283669073277e-07, /* 0x3e9b98d8d808ca92 */
519 3.52311752396749662260e-08, /* 0x3e62ea22c75cc980 */
520 3.52718000397367821054e-07, /* 0x3e97aba62bca0350 */
521 4.38857387992911129814e-07, /* 0x3e9d73833442278c */
522 3.22574606753482540743e-07, /* 0x3e95a5ca1fb18bf9 */
523 3.28730371182804296828e-08, /* 0x3e61a6092b6ecf28 */
524 7.56672470607639279700e-08, /* 0x3e744fd049aac104 */
525 3.26750155316369681821e-09, /* 0x3e2c114fd8df5180 */
526 3.21724445362095284743e-07, /* 0x3e95972f130feae5 */
527 1.06639427371776571151e-07, /* 0x3e7ca034a55fe198 */
528 3.41020788139524715063e-07, /* 0x3e96e2b149990227 */
529 1.00582838631232552824e-07, /* 0x3e7b00000294592c */
530 3.68439433859276640065e-07, /* 0x3e98b9bdc442620e */
531 2.20403078342388012027e-07, /* 0x3e8d94fdfabf3e4e */
532 1.62841467098298142534e-07, /* 0x3e85db30b145ad9a */
533 2.25325348296680733838e-07, /* 0x3e8e3e1eb95022b0 */
534 4.37462238226421614339e-07, /* 0x3e9d5b8b45442bd6 */
535 3.52055880555040706500e-07, /* 0x3e97a046231ecd2e */
536 4.75614398494781776825e-07, /* 0x3e9feafe3ef55232 */
537 3.60998399033215317516e-07, /* 0x3e9839e7bfd78267 */
538 3.79292434611513945954e-08, /* 0x3e645cf49d6fa900 */
539 1.29859015528549300061e-08, /* 0x3e4be3132b27f380 */
540 3.15927546985474913188e-07, /* 0x3e9533980bb84f9f */
541 2.28533679887379668031e-08, /* 0x3e5889e2ce3ba390 */
542 1.17222541823553133877e-07, /* 0x3e7f7778c3ad0cc8 */
543 1.51991208405464415857e-07, /* 0x3e846660cec4eba2 */
544 1.56958239325240655564e-07}; /* 0x3e85110b4611a626 */
545
546 /* Some constants and split constants. */
547
548 static double pi = 3.1415926535897932e+00, /* 0x400921fb54442d18 */
549 piby2 = 1.5707963267948966e+00, /* 0x3ff921fb54442d18 */
550 piby4 = 7.8539816339744831e-01, /* 0x3fe921fb54442d18 */
551 three_piby4 = 2.3561944901923449e+00, /* 0x4002d97c7f3321d2 */
552 pi_head = 3.1415926218032836e+00, /* 0x400921fb50000000 */
553 pi_tail = 3.1786509547056392e-08, /* 0x3e6110b4611a6263 */
554 piby2_head = 1.5707963267948965e+00, /* 0x3ff921fb54442d18 */
555 piby2_tail = 6.1232339957367660e-17; /* 0x3c91a62633145c07 */
556
557 double u, v, vbyu, q1, q2, s, u1, vu1, u2, vu2, uu, c, r;
558 unsigned int swap_vu, index, xzero, yzero, xnan, ynan, xinf, yinf;
559 int m, xexp, yexp, diffexp;
560
561 /* Find properties of arguments x and y. */
562
563 unsigned long long ux, ui, aux, xneg, uy, auy, yneg;
564
565 GET_BITS_DP64(x, ux);
566 GET_BITS_DP64(y, uy);
567 aux = ux & ~SIGNBIT_DP64;
568 auy = uy & ~SIGNBIT_DP64;
569 xexp = (int)((ux & EXPBITS_DP64) >> EXPSHIFTBITS_DP64);
570 yexp = (int)((uy & EXPBITS_DP64) >> EXPSHIFTBITS_DP64);
571 xneg = ux & SIGNBIT_DP64;
572 yneg = uy & SIGNBIT_DP64;
573 xzero = (aux == 0);
574 yzero = (auy == 0);
575 xnan = (aux > PINFBITPATT_DP64);
576 ynan = (auy > PINFBITPATT_DP64);
577 xinf = (aux == PINFBITPATT_DP64);
578 yinf = (auy == PINFBITPATT_DP64);
579
580 diffexp = yexp - xexp;
581
582 /* Special cases */
583
584 if (xnan)
585 return _handle_error("atan2", OP_ATAN2, ux|0x0008000000000000, _DOMAIN, 0,
586 EDOM, x, y, 2);
587 else if (ynan)
588 return _handle_error("atan2", OP_ATAN2, uy|0x0008000000000000, _DOMAIN, 0,
589 EDOM, x, y, 2);
590 else if (yzero)
591 { /* Zero y gives +-0 for positive x
592 and +-pi for negative x */
593 if (xneg)
594 {
595 if (yneg) return val_with_flags(-pi,AMD_F_INEXACT);
596 else return val_with_flags(pi,AMD_F_INEXACT);
597 }
598 else return y;
599 }
600 else if (xzero)
601 { /* Zero x gives +- pi/2
602 depending on sign of y */
603 if (yneg) return val_with_flags(-piby2,AMD_F_INEXACT);
604 else val_with_flags(piby2,AMD_F_INEXACT);
605 }
606
607 /* Scale up both x and y if they are both below 1/4.
608 This avoids any possible later denormalised arithmetic. */
609
610 if ((xexp < 1021 && yexp < 1021))
611 {
612 scaleUpDouble1024(ux, &ux);
613 scaleUpDouble1024(uy, &uy);
614 PUT_BITS_DP64(ux, x);
615 PUT_BITS_DP64(uy, y);
616 xexp = (int)((ux & EXPBITS_DP64) >> EXPSHIFTBITS_DP64);
617 yexp = (int)((uy & EXPBITS_DP64) >> EXPSHIFTBITS_DP64);
618 diffexp = yexp - xexp;
619 }
620
621 if (diffexp > 56)
622 { /* abs(y)/abs(x) > 2^56 => arctan(x/y)
623 is insignificant compared to piby2 */
624 if (yneg) return val_with_flags(-piby2,AMD_F_INEXACT);
625 else return val_with_flags(piby2,AMD_F_INEXACT);
626 }
627 else if (diffexp < -28 && (!xneg))
628 { /* x positive and dominant over y by a factor of 2^28.
629 In this case atan(y/x) is y/x to machine accuracy. */
630
631 if (diffexp < -1074) /* Result underflows */
632 {
633 if (yneg)
634 return val_with_flags(-0.0,AMD_F_INEXACT | AMD_F_UNDERFLOW);
635 else
636 return val_with_flags(0.0,AMD_F_INEXACT | AMD_F_UNDERFLOW);
637 }
638 else
639 {
640 if (diffexp < -1022)
641 {
642 /* Result will likely be denormalized */
643 y = scaleDouble_1(y, 100);
644 y /= x;
645 /* Now y is 2^100 times the true result. Scale it back down. */
646 GET_BITS_DP64(y, uy);
647 scaleDownDouble(uy, 100, &uy);
648 PUT_BITS_DP64(uy, y);
649 if ((uy & EXPBITS_DP64) == 0)
650 return val_with_flags(y, AMD_F_INEXACT | AMD_F_UNDERFLOW);
651 else
652 return y;
653 }
654 else
655 return y / x;
656 }
657 }
658 else if (diffexp < -56 && xneg)
659 { /* abs(x)/abs(y) > 2^56 and x < 0 => arctan(y/x)
660 is insignificant compared to pi */
661 if (yneg) return val_with_flags(-pi,AMD_F_INEXACT);
662 else return val_with_flags(pi,AMD_F_INEXACT);
663 }
664 else if (yinf && xinf)
665 { /* If abs(x) and abs(y) are both infinity
666 return +-pi/4 or +- 3pi/4 according to
667 signs. */
668 if (xneg)
669 {
670 if (yneg) return val_with_flags(-three_piby4,AMD_F_INEXACT);
671 else return val_with_flags(three_piby4,AMD_F_INEXACT);
672 }
673 else
674 {
675 if (yneg) return val_with_flags(-piby4,AMD_F_INEXACT);
676 else return val_with_flags(piby4,AMD_F_INEXACT);
677 }
678 }
679
680 /* General case: take absolute values of arguments */
681
682 u = x; v = y;
683 if (xneg) u = -x;
684 if (yneg) v = -y;
685
686 /* Swap u and v if necessary to obtain 0 < v < u. Compute v/u. */
687
688 swap_vu = (u < v);
689 if (swap_vu) { uu = u; u = v; v = uu; }
690 vbyu = v/u;
691
692 if (vbyu > 0.0625)
693 { /* General values of v/u. Use a look-up
694 table and series expansion. */
695
696 index = (int)(256*vbyu + 0.5);
697 q1 = atan_jby256_lead[index-16];
698 q2 = atan_jby256_tail[index-16];
699 c = index*1./256;
702 u = scaleDouble_2(u,-m);
703 v = scaleDouble_2(v,-m);
705 PUT_BITS_DP64(0xfffffffff8000000 & ui, u1); /* 26 leading bits of u */
706 u2 = u - u1;
707
708 r = ((v-c*u1)-c*u2)/(u+c*v);
709
710 /* Polynomial approximation to atan(r) */
711
712 s = r*r;
713 q2 = q2 + r - r*(s * (0.33333333333224095522 - s*(0.19999918038989143496)));
714 }
715 else if (vbyu < 1.e-8)
716 { /* v/u is small enough that atan(v/u) = v/u */
717 q1 = 0.0;
718 q2 = vbyu;
719 }
720 else /* vbyu <= 0.0625 */
721 {
722 /* Small values of v/u. Use a series expansion
723 computed carefully to minimise cancellation */
724
726 PUT_BITS_DP64(0xffffffff00000000 & ui, u1);
727 GET_BITS_DP64(vbyu, ui);
728 PUT_BITS_DP64(0xffffffff00000000 & ui, vu1);
729 u2 = u - u1;
730 vu2 = vbyu - vu1;
731
732 q1 = 0.0;
733 s = vbyu*vbyu;
734 q2 = vbyu +
735 ((((v - u1*vu1) - u2*vu1) - u*vu2)/u -
736 (vbyu*s*(0.33333333333333170500 -
737 s*(0.19999999999393223405 -
738 s*(0.14285713561807169030 -
739 s*(0.11110736283514525407 -
740 s*(0.90029810285449784439E-01)))))));
741 }
742
743 /* Tidy-up according to which quadrant the arguments lie in */
744
745 if (swap_vu) {q1 = piby2_head - q1; q2 = piby2_tail - q2;}
746 if (xneg) {q1 = pi_head - q1; q2 = pi_tail - q2;}
747 q1 = q1 + q2;
748
749 if (yneg) q1 = - q1;
750
751 return q1;
752}
double __cdecl _handle_error(char *fname, int opcode, unsigned long long value, int type, int flags, int error, double arg1, double arg2, int nargs)
Handles an error condition.
Definition: _handle_error.c:34
#define index(s, c)
Definition: various.h:29
#define EDOM
Definition: errno.h:54
#define _DOMAIN
Definition: math.h:20
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
const GLdouble * v
Definition: gl.h:2040
GLdouble s
Definition: gl.h:2039
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
const GLubyte * c
Definition: glext.h:8905
GLuint index
Definition: glext.h:6031
GLdouble GLdouble u2
Definition: glext.h:8308
GLdouble u1
Definition: glext.h:8308
const GLfloat * m
Definition: glext.h:10848
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
Definition: glfuncs.h:240
#define c
Definition: ke_i.h:80
#define AMD_F_INEXACT
Definition: libm_new.h:82
#define AMD_F_UNDERFLOW
Definition: libm_new.h:84
#define EXPSHIFTBITS_DP64
Definition: libm_util.h:56
#define GET_BITS_DP64(x, ux)
Definition: libm_util.h:118
#define PINFBITPATT_DP64
Definition: libm_util.h:53
#define SIGNBIT_DP64
Definition: libm_util.h:44
#define EXPBITS_DP64
Definition: libm_util.h:45
#define EXPBIAS_DP64
Definition: libm_util.h:55
#define PUT_BITS_DP64(ux, x)
Definition: libm_util.h:124
static refpint_t pi[]
Definition: server.c:112
UINT ui
Definition: oleauto.h:49

◆ ceil()

double __cdecl ceil ( double  x)

Definition at line 18 of file ceil.c.

19{
20 /* Load the value as uint64 */
21 unsigned long long u64 = *(unsigned long long*)&x;
22
23 /* Check for NAN */
24 if ((u64 & ~(1ULL << 63)) > 0x7FF0000000000000ull)
25 {
26 /* Set error bit */
27 u64 |= 0x0008000000000000ull;
28 return *(double*)&u64;
29 }
30
31 /* Check if x is positive */
32 if ((u64 & (1ULL << 63)) == 0)
33 {
34 /* Check if it fits into an int64 */
35 if (x < (double)_I64_MAX)
36 {
37 /* Cast to int64 to truncate towards 0. If this matches the
38 input, return it as is, otherwise add 1 */
39 double y = (double)(long long)x;
40 return (x > y) ? y + 1 : y;
41 }
42 else
43 {
44 /* The exponent is larger than the fraction bits.
45 This means the number is already an integer. */
46 return x;
47 }
48 }
49 else
50 {
51 /* Check if it fits into an int64 */
52 if (x > (double)_I64_MIN)
53 {
54 /* Cast to int64 to truncate towards 0. */
55 x = (double)(long long)x;
56 return (x == 0.) ? -0.0 : x;
57 }
58 else
59 {
60 /* The exponent is larger than the fraction bits.
61 This means the number is already an integer. */
62 return x;
63 }
64 }
65}
ULONG64 u64
Definition: btrfs.h:15
#define _I64_MAX
Definition: limits.h:37
#define _I64_MIN
Definition: limits.h:38
static const char mbstate_t *static wchar_t const char mbstate_t *static const wchar_t int *static double
Definition: string.c:91

◆ cos()

double __cdecl cos ( double  x)

Definition at line 21 of file cos.c.

22{
23 int quadrant;
24 double x2, result;
25
26 /* Calculate the quadrant */
27 quadrant = (int)(x * (2./M_PI));
28
29 /* Get offset inside quadrant */
30 x = x - quadrant * (M_PI/2.);
31
32 /* Normalize quadrant to [0..3] */
33 quadrant = quadrant & 0x3;
34
35 /* Fixup value for the generic function */
36 x += cos_off_tbl[quadrant];
37
38 /* Calculate the negative of the square of x */
39 x2 = - (x * x);
40
41 /* This is an unrolled taylor series using <PRECISION> iterations
42 * Example with 4 iterations:
43 * result = 1 - x^2/2! + x^4/4! - x^6/6! + x^8/8!
44 * To save multiplications and to keep the precision high, it's performed
45 * like this:
46 * result = 1 - x^2 * (1/2! - x^2 * (1/4! - x^2 * (1/6! - x^2 * (1/8!))))
47 */
48
49 /* Start with 0, compiler will optimize this away */
50 result = 0;
51
52#if (PRECISION >= 10)
53 result += 1./(1.*2*3*4*5*6*7*8*9*10*11*12*13*14*15*16*17*18*19*20);
54 result *= x2;
55#endif
56#if (PRECISION >= 9)
57 result += 1./(1.*2*3*4*5*6*7*8*9*10*11*12*13*14*15*16*17*18);
58 result *= x2;
59#endif
60#if (PRECISION >= 8)
61 result += 1./(1.*2*3*4*5*6*7*8*9*10*11*12*13*14*15*16);
62 result *= x2;
63#endif
64#if (PRECISION >= 7)
65 result += 1./(1.*2*3*4*5*6*7*8*9*10*11*12*13*14);
66 result *= x2;
67#endif
68#if (PRECISION >= 6)
69 result += 1./(1.*2*3*4*5*6*7*8*9*10*11*12);
70 result *= x2;
71#endif
72#if (PRECISION >= 5)
73 result += 1./(1.*2*3*4*5*6*7*8*9*10);
74 result *= x2;
75#endif
76 result += 1./(1.*2*3*4*5*6*7*8);
77 result *= x2;
78
79 result += 1./(1.*2*3*4*5*6);
80 result *= x2;
81
82 result += 1./(1.*2*3*4);
83 result *= x2;
84
85 result += 1./(1.*2);
86 result *= x2;
87
88 result += 1;
89
90 /* Apply correct sign */
91 result *= cos_sign_tbl[quadrant];
92
93 return result;
94}
GLuint64EXT * result
Definition: glext.h:11304
static double cos_off_tbl[]
Definition: cos.c:17
static double cos_sign_tbl[]
Definition: cos.c:18
#define M_PI
Definition: cos.c:15
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG _In_ LONG x2
Definition: winddi.h:3710

◆ exp()

double __cdecl exp ( double  )

◆ exp2()

double exp2 ( double  x)

Definition at line 68 of file mathf.c.

68{ return pow(2.0, x); }
double __cdecl pow(double, double)
Definition: freeldr.c:178

◆ exp2f()

float exp2f ( float  x)

Definition at line 69 of file mathf.c.

69{ return powf(2.0f, x); }
float __cdecl powf(float, float)
Definition: powf.c:14

◆ floor()

double __cdecl floor ( double  x)

Definition at line 18 of file floor.c.

19{
20 /* Load the value as uint64 */
21 unsigned long long u64 = *(unsigned long long*)&x;
22
23 /* Check for NAN */
24 if ((u64 & ~(1ULL << 63)) > 0x7FF0000000000000ull)
25 {
26 /* Set error bit */
27 u64 |= 0x0008000000000000ull;
28 return *(double*)&u64;
29 }
30
31 /* Check if x is positive */
32 if ((u64 & (1ULL << 63)) == 0)
33 {
34 /* Check if it fits into an int64 */
35 if (x < (double)_I64_MAX)
36 {
37 /* Just cast to int64, which will truncate towards 0,
38 which is what we want here.*/
39 return (double)(long long)x;
40 }
41 else
42 {
43 /* The exponent is larger than the fraction bits.
44 This means the number is already an integer. */
45 return x;
46 }
47 }
48 else
49 {
50 /* Check if it fits into an int64 */
51 if (x > (double)_I64_MIN)
52 {
53 /* Check if it is -0 */
54 if (x == -0.)
55 {
56 return -0.;
57 }
58
59 /* Cast to int64 to truncate towards 0. If this matches the
60 input, return it as is, otherwise subtract 1 */
61 double y = (double)(long long)x;
62 return (x == y) ? y : y - 1;
63 }
64 else
65 {
66 /* The exponent is larger than the fraction bits.
67 This means the number is already an integer. */
68 return x;
69 }
70 }
71}
#define long
Definition: qsort.c:33

◆ log()

double __cdecl log ( double  x)

Definition at line 184 of file freeldr.c.

185{
186 __debugbreak();
187 return 0.0;
188}
void __cdecl __debugbreak(void)
Definition: intrin_ppc.h:698

◆ pow()

double __cdecl pow ( double  x,
double  y 
)

Definition at line 178 of file freeldr.c.

179{
180 __debugbreak();
181 return 0.0;
182}

Referenced by exp2().

◆ powf()

float __cdecl powf ( float  x,
float  y 
)

Definition at line 14 of file powf.c.

15{
16 return (float)pow((double)x, (double)y);
17}
double __cdecl pow(double x, double y)
Definition: freeldr.c:178

Referenced by exp2f().

◆ sin()

double __cdecl sin ( double  x)

Definition at line 21 of file sin.c.

22{
23 int quadrant;
24 double x2, result;
25
26 /* Calculate the quadrant */
27 quadrant = (int)(x * (2./M_PI));
28
29 /* Get offset inside quadrant */
30 x = x - quadrant * (M_PI/2.);
31
32 /* Normalize quadrant to [0..3] */
33 quadrant = (quadrant - 1) & 0x3;
34
35 /* Fixup value for the generic function */
36 x += sin_off_tbl[quadrant];
37
38 /* Calculate the negative of the square of x */
39 x2 = - (x * x);
40
41 /* This is an unrolled taylor series using <PRECISION> iterations
42 * Example with 4 iterations:
43 * result = 1 - x^2/2! + x^4/4! - x^6/6! + x^8/8!
44 * To save multiplications and to keep the precision high, it's performed
45 * like this:
46 * result = 1 - x^2 * (1/2! - x^2 * (1/4! - x^2 * (1/6! - x^2 * (1/8!))))
47 */
48
49 /* Start with 0, compiler will optimize this away */
50 result = 0;
51
52#if (PRECISION >= 10)
53 result += 1./(1.*2*3*4*5*6*7*8*9*10*11*12*13*14*15*16*17*18*19*20);
54 result *= x2;
55#endif
56#if (PRECISION >= 9)
57 result += 1./(1.*2*3*4*5*6*7*8*9*10*11*12*13*14*15*16*17*18);
58 result *= x2;
59#endif
60#if (PRECISION >= 8)
61 result += 1./(1.*2*3*4*5*6*7*8*9*10*11*12*13*14*15*16);
62 result *= x2;
63#endif
64#if (PRECISION >= 7)
65 result += 1./(1.*2*3*4*5*6*7*8*9*10*11*12*13*14);
66 result *= x2;
67#endif
68#if (PRECISION >= 6)
69 result += 1./(1.*2*3*4*5*6*7*8*9*10*11*12);
70 result *= x2;
71#endif
72#if (PRECISION >= 5)
73 result += 1./(1.*2*3*4*5*6*7*8*9*10);
74 result *= x2;
75#endif
76 result += 1./(1.*2*3*4*5*6*7*8);
77 result *= x2;
78
79 result += 1./(1.*2*3*4*5*6);
80 result *= x2;
81
82 result += 1./(1.*2*3*4);
83 result *= x2;
84
85 result += 1./(1.*2);
86 result *= x2;
87
88 result += 1;
89
90 /* Apply correct sign */
91 result *= sin_sign_tbl[quadrant];
92
93 return result;
94}
static double sin_off_tbl[]
Definition: sin.c:17
static double sin_sign_tbl[]
Definition: sin.c:18
#define M_PI
Definition: sin.c:15

◆ sqrt()

double __cdecl sqrt ( double  x)

Definition at line 5 of file sqrt.c.

7{
8 register union
9 {
10 __m128d x128d;
11 __m128i x128i;
12 } u ;
13 register union
14 {
15 unsigned long long ullx;
16 double dbl;
17 } u2;
18
19 /* Set the lower double-precision value of u to x.
20 All that we want, is that the compiler understands that we have the
21 function parameter in a register that we can address as an __m128.
22 Sadly there is no obvious way to do that. If we use the union, VS will
23 generate code to store xmm0 in memory and the read it into a GPR.
24 We avoid memory access by using a direct move. But even here we won't
25 get a simple MOVSD. We can either do:
26 a) _mm_set_sd: move x into the lower part of an xmm register and zero
27 out the upper part (XORPD+MOVSD)
28 b) _mm_set1_pd: move x into the lower and higher part of an xmm register
29 (MOVSD+UNPCKLPD)
30 c) _mm_set_pd, which either generates a memory access, when we try to
31 tell it to keep the upper 64 bits, or generate 2 MOVAPS + UNPCKLPD
32 We choose a, which is probably the fastest.
33 */
34 u.x128d = _mm_set_sd(x);
35
36 /* Move the contents of the lower 64 bit into a 64 bit GPR using MOVD */
37 u2.ullx = _mm_cvtsi128_si64(u.x128i);
38
39 /* Check for negative values */
40 if (u2.ullx & 0x8000000000000000ULL)
41 {
42 /* Check if this is *really* negative and not just -0.0 */
43 if (u2.ullx != 0x8000000000000000ULL)
44 {
45 /* Return -1.#IND00 */
46 u2.ullx = 0xfff8000000000000ULL;
47 }
48
49 /* Return what we have */
50 return u2.dbl;
51 }
52
53 /* Check if this is a NaN (bits 52-62 are 1, bit 0-61 are not all 0) or
54 negative (bit 63 is 1) */
55 if (u2.ullx > 0x7FF0000000000000ULL)
56 {
57 /* Set this bit. That's what MS function does. */
58 u2.ullx |= 0x8000000000000ULL;
59 return u2.dbl;
60 }
61
62 /* Calculate the square root. */
63#ifdef _MSC_VER
64 /* Another YAY for the MS compiler. There are 2 instructions we could use:
65 SQRTPD (computes sqrt for 2 double values) or SQRTSD (computes sqrt for
66 only the lower 64 bit double value). Obviously we only need 1. And on
67 Some architectures SQRTPD is twice as slow as SQRTSD. On the other hand
68 the MS compiler is stupid and always generates an additional MOVAPS
69 instruction when SQRTSD is used. We choose to use SQRTPD here since on
70 modern hardware it's as fast as SQRTSD. */
71 u.x128d = _mm_sqrt_pd(u.x128d); // SQRTPD
72#else
73 u.x128d = _mm_sqrt_sd(u.x128d, u.x128d); // SQRTSD
74#endif
75
76 return u.x128d.m128d_f64[0];
77}
__m128d _mm_set_sd(double w)
Definition: emmintrin.h:1037
__m128d _mm_sqrt_sd(__m128d a, __m128d b)
Definition: emmintrin.h:620
__INTRIN_INLINE_SSE2 long long _mm_cvtsi128_si64(__m128i a)
Definition: emmintrin.h:1551
__m128d _mm_sqrt_pd(__m128d a)
Definition: emmintrin.h:626

◆ tan()

double __cdecl tan ( double  x)

Definition at line 122 of file tan.c.

123{
124 double r, rr;
125 int region, xneg;
126
127 unsigned long long ux, ax;
128 GET_BITS_DP64(x, ux);
129 ax = (ux & ~SIGNBIT_DP64);
130 if (ax <= 0x3fe921fb54442d18) /* abs(x) <= pi/4 */
131 {
132 if (ax < 0x3f20000000000000) /* abs(x) < 2.0^(-13) */
133 {
134 if (ax < 0x3e40000000000000) /* abs(x) < 2.0^(-27) */
135 {
136 if (ax == 0x0000000000000000) return x;
137 else return val_with_flags(x, AMD_F_INEXACT);
138 }
139 else
140 {
141 /* Using a temporary variable prevents 64-bit VC++ from
142 rearranging
143 x + x*x*x*0.333333333333333333;
144 into
145 x * (1 + x*x*0.333333333333333333);
146 The latter results in an incorrectly rounded answer. */
147 double tmp;
148 tmp = x*x*x*0.333333333333333333;
149 return x + tmp;
150 }
151 }
152 else
153 return tan_piby4(x, 0.0, 0);
154 }
155 else if ((ux & EXPBITS_DP64) == EXPBITS_DP64)
156 {
157 /* x is either NaN or infinity */
158 if (ux & MANTBITS_DP64)
159 /* x is NaN */
160 return _handle_error("tan", OP_TAN, ux|0x0008000000000000, _DOMAIN, 0,
161 EDOM, x, 0.0, 1);
162 else
163 /* x is infinity. Return a NaN */
165 EDOM, x, 0.0, 1);
166 }
167 xneg = (ax != ux);
168
169
170 if (xneg)
171 x = -x;
172
173 if (x < 5.0e5)
174 {
175 /* For these size arguments we can just carefully subtract the
176 appropriate multiple of pi/2, using extra precision where
177 x is close to an exact multiple of pi/2 */
178 static const double
179 twobypi = 6.36619772367581382433e-01, /* 0x3fe45f306dc9c883 */
180 piby2_1 = 1.57079632673412561417e+00, /* 0x3ff921fb54400000 */
181 piby2_1tail = 6.07710050650619224932e-11, /* 0x3dd0b4611a626331 */
182 piby2_2 = 6.07710050630396597660e-11, /* 0x3dd0b4611a600000 */
183 piby2_2tail = 2.02226624879595063154e-21, /* 0x3ba3198a2e037073 */
184 piby2_3 = 2.02226624871116645580e-21, /* 0x3ba3198a2e000000 */
185 piby2_3tail = 8.47842766036889956997e-32; /* 0x397b839a252049c1 */
186 double t, rhead, rtail;
187 int npi2;
188 unsigned long long uy, xexp, expdiff;
189 xexp = ax >> EXPSHIFTBITS_DP64;
190 /* How many pi/2 is x a multiple of? */
191 if (ax <= 0x400f6a7a2955385e) /* 5pi/4 */
192 {
193 if (ax <= 0x4002d97c7f3321d2) /* 3pi/4 */
194 npi2 = 1;
195 else
196 npi2 = 2;
197 }
198 else if (ax <= 0x401c463abeccb2bb) /* 9pi/4 */
199 {
200 if (ax <= 0x4015fdbbe9bba775) /* 7pi/4 */
201 npi2 = 3;
202 else
203 npi2 = 4;
204 }
205 else
206 npi2 = (int)(x * twobypi + 0.5);
207 /* Subtract the multiple from x to get an extra-precision remainder */
208 rhead = x - npi2 * piby2_1;
209 rtail = npi2 * piby2_1tail;
210 GET_BITS_DP64(rhead, uy);
211 expdiff = xexp - ((uy & EXPBITS_DP64) >> EXPSHIFTBITS_DP64);
212 if (expdiff > 15)
213 {
214 /* The remainder is pretty small compared with x, which
215 implies that x is a near multiple of pi/2
216 (x matches the multiple to at least 15 bits) */
217 t = rhead;
218 rtail = npi2 * piby2_2;
219 rhead = t - rtail;
220 rtail = npi2 * piby2_2tail - ((t - rhead) - rtail);
221 if (expdiff > 48)
222 {
223 /* x matches a pi/2 multiple to at least 48 bits */
224 t = rhead;
225 rtail = npi2 * piby2_3;
226 rhead = t - rtail;
227 rtail = npi2 * piby2_3tail - ((t - rhead) - rtail);
228 }
229 }
230 r = rhead - rtail;
231 rr = (rhead - r) - rtail;
232 region = npi2 & 3;
233 }
234 else
235 {
236 /* Reduce x into range [-pi/4,pi/4] */
237 __remainder_piby2(x, &r, &rr, &region);
238 }
239
240 if (xneg)
241 return -tan_piby4(r, rr, region & 1);
242 else
243 return tan_piby4(r, rr, region & 1);
244}
GLdouble GLdouble t
Definition: gl.h:2047
#define AMD_F_INVALID
Definition: libm_new.h:86
void __remainder_piby2(double x, double *r, double *rr, int *region)
#define INDEFBITPATT_DP64
Definition: libm_util.h:52
#define MANTBITS_DP64
Definition: libm_util.h:46
static double tan_piby4(double x, double xx, int recip)
Definition: tan.c:42
ecx edi movl ebx edx edi decl ecx esi eax jecxz decl eax andl eax esi movl edx movl TEMP incl eax andl eax ecx incl ebx testl eax jnz xchgl ecx incl TEMP esp ecx subl ebx pushl ecx ecx edx ecx shrl ecx mm0 mm4 mm0 mm4 mm1 mm5 mm1 mm5 mm2 mm6 mm2 mm6 mm3 mm7 mm3 mm7 paddd mm0 paddd mm4 paddd mm0 paddd mm4 paddd mm0 paddd mm4 movq mm1 movq mm5 psrlq mm1 psrlq mm5 paddd mm0 paddd mm4 psrad mm0 psrad mm4 packssdw mm0 packssdw mm4 mm1 punpckldq mm0 pand mm1 pand mm0 por mm1 movq edi esi edx edi decl ecx jnz popl ecx andl ecx jecxz mm0 mm0 mm1 mm1 mm2 mm2 mm3 mm3 paddd mm0 paddd mm0 paddd mm0 movq mm1 psrlq mm1 paddd mm0 psrad mm0 packssdw mm0 movd eax movw ax
Definition: synth_sse3d.h:180