Release 1.5.29.
[wine] / dlls / msvcp90 / math.c
1 /*
2  * Copyright 2011 Alexandre Julliard
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18
19 #include "config.h"
20
21 #include <stdarg.h>
22 #include <limits.h>
23 #include <float.h>
24 #define _USE_MATH_DEFINES
25 #include <math.h>
26
27 #include "msvcp90.h"
28 #include "windef.h"
29 #include "winbase.h"
30
31 typedef double LDOUBLE;  /* long double is just a double */
32
33 typedef struct { } std_Num_base;
34 typedef struct { } std_Ctraits;
35
36 enum std_float_denorm_style
37 {
38     denorm_indeterminate = -1,
39     denorm_absent = 0,
40     denorm_present = 1
41 };
42
43 enum std_float_round_style
44 {
45     round_indeterminate = -1,
46     round_toward_zero = 0,
47     round_to_nearest = 1,
48     round_toward_infinity = 2,
49     round_toward_neg_infinity = 3
50 };
51
52 /* these are defined as integers but the bit patterns are then interpreted as floats/doubles */
53 const DWORD     _FDenorm = 1;
54 const ULONGLONG _Denorm  = 1;
55 const ULONGLONG _LDenorm = 1;
56 const DWORD     _FInf    = 0x7f800000;
57 const ULONGLONG _Inf     = (ULONGLONG)0x7ff00000 << 32;
58 const ULONGLONG _LInf    = (ULONGLONG)0x7ff00000 << 32;
59 const DWORD     _FNan    = 0x7fc00000;
60 const ULONGLONG _Nan     = (ULONGLONG)0x7ff80000 << 32;
61 const ULONGLONG _LNan    = (ULONGLONG)0x7ff80000 << 32;
62 const DWORD     _FSnan   = 0x7f800001;
63 const ULONGLONG _Snan    = ((ULONGLONG)0x7ff00000 << 32) + 1;
64 const ULONGLONG _LSnan   = ((ULONGLONG)0x7ff00000 << 32) + 1;
65 const ULONGLONG _LZero   = 0;
66 const ULONGLONG _Hugeval = (ULONGLONG)0x7ff00000 << 32;
67
68 const float   _FEps = FLT_EPSILON;
69 const double  _Eps  = DBL_EPSILON;
70 const LDOUBLE _LEps = LDBL_EPSILON;
71
72 /* ?digits10@?$numeric_limits@C@std@@2HB -> public: static int const std::numeric_limits<signed char>::digits10 */
73 const int std_numeric_limits_signed_char_digits10 = 2;
74
75 /* ?digits10@?$numeric_limits@D@std@@2HB -> public: static int const std::numeric_limits<char>::digits10 */
76 const int std_numeric_limits_char_digits10 = 2;
77
78 /* ?digits10@?$numeric_limits@E@std@@2HB -> public: static int const std::numeric_limits<unsigned char>::digits10 */
79 const int std_numeric_limits_unsigned_char_digits10 = 2;
80
81 /* ?digits10@?$numeric_limits@F@std@@2HB -> public: static int const std::numeric_limits<short>::digits10 */
82 const int std_numeric_limits_short_digits10 = 4;
83
84 /* ?digits10@?$numeric_limits@G@std@@2HB -> public: static int const std::numeric_limits<unsigned short>::digits10 */
85 const int std_numeric_limits_unsigned_short_digits10 = 4;
86
87 /* ?digits10@?$numeric_limits@H@std@@2HB -> public: static int const std::numeric_limits<int>::digits10 */
88 const int std_numeric_limits_int_digits10 = 9;
89
90 /* ?digits10@?$numeric_limits@I@std@@2HB -> public: static int const std::numeric_limits<unsigned int>::digits10 */
91 const int std_numeric_limits_unsigned_int_digits10 = 9;
92
93 /* ?digits10@?$numeric_limits@J@std@@2HB -> public: static int const std::numeric_limits<long>::digits10 */
94 const int std_numeric_limits_long_digits10 = 9;
95
96 /* ?digits10@?$numeric_limits@K@std@@2HB -> public: static int const std::numeric_limits<unsigned long>::digits10 */
97 const int std_numeric_limits_unsigned_long_digits10 = 9;
98
99 /* ?digits10@?$numeric_limits@M@std@@2HB -> public: static int const std::numeric_limits<float>::digits10 */
100 const int std_numeric_limits_float_digits10 = FLT_DIG;
101
102 /* ?digits10@?$numeric_limits@N@std@@2HB -> public: static int const std::numeric_limits<double>::digits10 */
103 const int std_numeric_limits_double_digits10 = DBL_DIG;
104
105 /* ?digits10@?$numeric_limits@O@std@@2HB -> public: static int const std::numeric_limits<long double>::digits10 */
106 const int std_numeric_limits_long_double_digits10 = LDBL_DIG;
107
108 /* ?digits10@?$numeric_limits@_J@std@@2HB -> public: static int const std::numeric_limits<__int64>::digits10 */
109 const int std_numeric_limits_int64_digits10 = 18;
110
111 /* ?digits10@?$numeric_limits@_K@std@@2HB -> public: static int const std::numeric_limits<unsigned __int64>::digits10 */
112 const int std_numeric_limits_unsigned_int64_digits10 = 18;
113
114 /* ?digits10@?$numeric_limits@_N@std@@2HB -> public: static int const std::numeric_limits<bool>::digits10 */
115 const int std_numeric_limits_bool_digits10 = 0;
116
117 /* ?digits10@?$numeric_limits@_W@std@@2HB -> public: static int const std::numeric_limits<wchar_t>::digits10 */
118 const int std_numeric_limits_wchar_t_digits10 = 4;
119
120 /* ?digits10@_Num_base@std@@2HB -> public: static int const std::_Num_base::digits10 */
121 const int std_Num_base_digits10 = 0;
122
123 /* ?digits@?$numeric_limits@C@std@@2HB -> public: static int const std::numeric_limits<signed char>::digits */
124 const int std_numeric_limits_signed_char_digits = 7;
125
126 /* ?digits@?$numeric_limits@D@std@@2HB -> public: static int const std::numeric_limits<char>::digits */
127 const int std_numeric_limits_char_digits = (CHAR_MIN < 0) ? 7 : 8;
128
129 /* ?digits@?$numeric_limits@E@std@@2HB -> public: static int const std::numeric_limits<unsigned char>::digits */
130 const int std_numeric_limits_unsigned_char_digits = 8;
131
132 /* ?digits@?$numeric_limits@F@std@@2HB -> public: static int const std::numeric_limits<short>::digits */
133 const int std_numeric_limits_short_digits = 15;
134
135 /* ?digits@?$numeric_limits@G@std@@2HB -> public: static int const std::numeric_limits<unsigned short>::digits */
136 const int std_numeric_limits_unsigned_short_digits = 16;
137
138 /* ?digits@?$numeric_limits@H@std@@2HB -> public: static int const std::numeric_limits<int>::digits */
139 const int std_numeric_limits_int_digits = 31;
140
141 /* ?digits@?$numeric_limits@I@std@@2HB -> public: static int const std::numeric_limits<unsigned int>::digits */
142 const int std_numeric_limits_unsigned_int_digits = 32;
143
144 /* ?digits@?$numeric_limits@J@std@@2HB -> public: static int const std::numeric_limits<long>::digits */
145 const int std_numeric_limits_long_digits = 31;
146
147 /* ?digits@?$numeric_limits@K@std@@2HB -> public: static int const std::numeric_limits<unsigned long>::digits */
148 const int std_numeric_limits_unsigned_long_digits = 32;
149
150 /* ?digits@?$numeric_limits@M@std@@2HB -> public: static int const std::numeric_limits<float>::digits */
151 const int std_numeric_limits_float_digits = FLT_MANT_DIG;
152
153 /* ?digits@?$numeric_limits@N@std@@2HB -> public: static int const std::numeric_limits<double>::digits */
154 const int std_numeric_limits_double_digits = DBL_MANT_DIG;
155
156 /* ?digits@?$numeric_limits@O@std@@2HB -> public: static int const std::numeric_limits<long double>::digits */
157 const int std_numeric_limits_long_double_digits = LDBL_MANT_DIG;
158
159 /* ?digits@?$numeric_limits@_J@std@@2HB -> public: static int const std::numeric_limits<__int64>::digits */
160 const int std_numeric_limits_int64_digits = 63;
161
162 /* ?digits@?$numeric_limits@_K@std@@2HB -> public: static int const std::numeric_limits<unsigned __int64>::digits */
163 const int std_numeric_limits_unsigned_int64_digits = 64;
164
165 /* ?digits@?$numeric_limits@_N@std@@2HB -> public: static int const std::numeric_limits<bool>::digits */
166 const int std_numeric_limits_bool_digits = 1;
167
168 /* ?digits@?$numeric_limits@_W@std@@2HB -> public: static int const std::numeric_limits<wchar_t>::digits */
169 const int std_numeric_limits_wchar_t_digits = 16;
170
171 /* ?digits@_Num_base@std@@2HB -> public: static int const std::_Num_base::digits */
172 const int std_Num_base_digits = 0;
173
174 /* ?has_denorm@_Num_base@std@@2W4float_denorm_style@2@B -> public: static enum std::float_denorm_style const std::_Num_base::has_denorm */
175 const enum std_float_denorm_style std_Num_base_has_denorm = denorm_absent;
176
177 /* ?has_denorm@_Num_float_base@std@@2W4float_denorm_style@2@B -> public: static enum std::float_denorm_style const std::_Num_float_base::has_denorm */
178 const enum std_float_denorm_style std_Num_float_base_has_denorm = denorm_present;
179
180 /* ?has_denorm_loss@_Num_base@std@@2_NB -> public: static bool const std::_Num_base::has_denorm_loss */
181 const BOOLEAN std_Num_base_has_denorm_loss = FALSE;
182
183 /* ?has_denorm_loss@_Num_float_base@std@@2_NB -> public: static bool const std::_Num_float_base::has_denorm_loss */
184 const BOOLEAN std_Num_float_base_has_denorm_loss = TRUE;
185
186 /* ?has_infinity@_Num_base@std@@2_NB -> public: static bool const std::_Num_base::has_infinity */
187 const BOOLEAN std_Num_base_has_infinity = FALSE;
188
189 /* ?has_infinity@_Num_float_base@std@@2_NB -> public: static bool const std::_Num_float_base::has_infinity */
190 const BOOLEAN std_Num_float_base_has_infinity = TRUE;
191
192 /* ?has_quiet_NaN@_Num_base@std@@2_NB -> public: static bool const std::_Num_base::has_quiet_NaN */
193 const BOOLEAN std_Num_base_has_quiet_NaN = FALSE;
194
195 /* ?has_quiet_NaN@_Num_float_base@std@@2_NB -> public: static bool const std::_Num_float_base::has_quiet_NaN */
196 const BOOLEAN std_Num_float_base_has_quiet_NaN = TRUE;
197
198 /* ?has_signaling_NaN@_Num_base@std@@2_NB -> public: static bool const std::_Num_base::has_signaling_NaN */
199 const BOOLEAN std_Num_base_has_signaling_NaN = FALSE;
200
201 /* ?has_signaling_NaN@_Num_float_base@std@@2_NB -> public: static bool const std::_Num_float_base::has_signaling_NaN */
202 const BOOLEAN std_Num_float_base_has_signaling_NaN = TRUE;
203
204 /* ?is_bounded@_Num_base@std@@2_NB -> public: static bool const std::_Num_base::is_bounded */
205 const BOOLEAN std_Num_base_is_bounded = FALSE;
206
207 /* ?is_bounded@_Num_float_base@std@@2_NB -> public: static bool const std::_Num_float_base::is_bounded */
208 const BOOLEAN std_Num_float_base_is_bounded = TRUE;
209
210 /* ?is_bounded@_Num_int_base@std@@2_NB -> public: static bool const std::_Num_int_base::is_bounded */
211 const BOOLEAN std_Num_int_base_is_bounded = TRUE;
212
213 /* ?is_exact@_Num_base@std@@2_NB -> public: static bool const std::_Num_base::is_exact */
214 const BOOLEAN std_Num_base_is_exact = FALSE;
215
216 /* ?is_exact@_Num_float_base@std@@2_NB -> public: static bool const std::_Num_float_base::is_exact */
217 const BOOLEAN std_Num_float_base_is_exact = FALSE;
218
219 /* ?is_exact@_Num_int_base@std@@2_NB -> public: static bool const std::_Num_int_base::is_exact */
220 const BOOLEAN std_Num_int_base_is_exact = TRUE;
221
222 /* ?is_iec559@_Num_base@std@@2_NB -> public: static bool const std::_Num_base::is_iec559 */
223 const BOOLEAN std_Num_base_is_iec559 = FALSE;
224
225 /* ?is_iec559@_Num_float_base@std@@2_NB -> public: static bool const std::_Num_float_base::is_iec559 */
226 const BOOLEAN std_Num_float_base_is_iec559 = TRUE;
227
228 /* ?is_integer@_Num_base@std@@2_NB -> public: static bool const std::_Num_base::is_integer */
229 const BOOLEAN std_Num_base_is_integer = FALSE;
230
231 /* ?is_integer@_Num_float_base@std@@2_NB -> public: static bool const std::_Num_float_base::is_integer */
232 const BOOLEAN std_Num_float_base_is_integer = FALSE;
233
234 /* ?is_integer@_Num_int_base@std@@2_NB -> public: static bool const std::_Num_int_base::is_integer */
235 const BOOLEAN std_Num_int_base_is_integer = TRUE;
236
237 /* ?is_modulo@?$numeric_limits@_N@std@@2_NB -> public: static bool const std::numeric_limits<bool>::is_modulo */
238 const BOOLEAN std_numeric_limits_bool_is_modulo = FALSE;
239
240 /* ?is_modulo@_Num_base@std@@2_NB -> public: static bool const std::_Num_base::is_modulo */
241 const BOOLEAN std_Num_base_is_modulo = FALSE;
242
243 /* ?is_modulo@_Num_float_base@std@@2_NB -> public: static bool const std::_Num_float_base::is_modulo */
244 const BOOLEAN std_Num_float_base_is_modulo = FALSE;
245
246 /* ?is_modulo@_Num_int_base@std@@2_NB -> public: static bool const std::_Num_int_base::is_modulo */
247 const BOOLEAN std_Num_int_base_is_modulo = TRUE;
248
249 /* ?is_signed@?$numeric_limits@C@std@@2_NB -> public: static bool const std::numeric_limits<signed char>::is_signed */
250 const BOOLEAN std_numeric_limits_signed_char_is_signed = TRUE;
251
252 /* ?is_signed@?$numeric_limits@D@std@@2_NB -> public: static bool const std::numeric_limits<char>::is_signed */
253 const BOOLEAN std_numeric_limits_char_is_signed = (CHAR_MIN < 0);
254
255 /* ?is_signed@?$numeric_limits@E@std@@2_NB -> public: static bool const std::numeric_limits<unsigned char>::is_signed */
256 const BOOLEAN std_numeric_limits_unsigned_char_is_signed = FALSE;
257
258 /* ?is_signed@?$numeric_limits@F@std@@2_NB -> public: static bool const std::numeric_limits<short>::is_signed */
259 const BOOLEAN std_numeric_limits_short_is_signed = TRUE;
260
261 /* ?is_signed@?$numeric_limits@G@std@@2_NB -> public: static bool const std::numeric_limits<unsigned short>::is_signed */
262 const BOOLEAN std_numeric_limits_unsigned_short_is_signed = FALSE;
263
264 /* ?is_signed@?$numeric_limits@H@std@@2_NB -> public: static bool const std::numeric_limits<int>::is_signed */
265 const BOOLEAN std_numeric_limits_int_is_signed = TRUE;
266
267 /* ?is_signed@?$numeric_limits@I@std@@2_NB -> public: static bool const std::numeric_limits<unsigned int>::is_signed */
268 const BOOLEAN std_numeric_limits_unsigned_int_is_signed = FALSE;
269
270 /* ?is_signed@?$numeric_limits@J@std@@2_NB -> public: static bool const std::numeric_limits<long>::is_signed */
271 const BOOLEAN std_numeric_limits_long_is_signed = TRUE;
272
273 /* ?is_signed@?$numeric_limits@K@std@@2_NB -> public: static bool const std::numeric_limits<unsigned long>::is_signed */
274 const BOOLEAN std_numeric_limits_unsigned_long_is_signed = FALSE;
275
276 /* ?is_signed@?$numeric_limits@_J@std@@2_NB -> public: static bool const std::numeric_limits<__int64>::is_signed */
277 const BOOLEAN std_numeric_limits_int64_is_signed = TRUE;
278
279 /* ?is_signed@?$numeric_limits@_K@std@@2_NB -> public: static bool const std::numeric_limits<unsigned __int64>::is_signed */
280 const BOOLEAN std_numeric_limits_unsigned_int64_is_signed = FALSE;
281
282 /* ?is_signed@?$numeric_limits@_N@std@@2_NB -> public: static bool const std::numeric_limits<bool>::is_signed */
283 const BOOLEAN std_numeric_limits_bool_is_signed = FALSE;
284
285 /* ?is_signed@?$numeric_limits@_W@std@@2_NB -> public: static bool const std::numeric_limits<wchar_t>::is_signed */
286 const BOOLEAN std_numeric_limits_wchar_t_is_signed = FALSE;
287
288 /* ?is_signed@_Num_base@std@@2_NB -> public: static bool const std::_Num_base::is_signed */
289 const BOOLEAN std_Num_base_is_signed = FALSE;
290
291 /* ?is_signed@_Num_float_base@std@@2_NB -> public: static bool const std::_Num_float_base::is_signed */
292 const BOOLEAN std_Num_float_base_is_signed = TRUE;
293
294 /* ?is_specialized@_Num_base@std@@2_NB -> public: static bool const std::_Num_base::is_specialized */
295 const BOOLEAN std_Num_base_is_specialized = FALSE;
296
297 /* ?is_specialized@_Num_float_base@std@@2_NB -> public: static bool const std::_Num_float_base::is_specialized */
298 const BOOLEAN std_Num_float_base_is_specialized = TRUE;
299
300 /* ?is_specialized@_Num_int_base@std@@2_NB -> public: static bool const std::_Num_int_base::is_specialized */
301 const BOOLEAN std_Num_int_base_is_specialized = TRUE;
302
303 /* ?max_exponent10@?$numeric_limits@M@std@@2HB -> public: static int const std::numeric_limits<float>::max_exponent10 */
304 const int std_numeric_limits_float_max_exponent10 = FLT_MAX_10_EXP;
305
306 /* ?max_exponent10@?$numeric_limits@N@std@@2HB -> public: static int const std::numeric_limits<double>::max_exponent10 */
307 const int std_numeric_limits_double_max_exponent10 = DBL_MAX_10_EXP;
308
309 /* ?max_exponent10@?$numeric_limits@O@std@@2HB -> public: static int const std::numeric_limits<long double>::max_exponent10 */
310 const int std_numeric_limits_long_double_max_exponent10 = LDBL_MAX_10_EXP;
311
312 /* ?max_exponent10@_Num_base@std@@2HB -> public: static int const std::_Num_base::max_exponent10 */
313 const int std_Num_base_max_exponent10 = 0;
314
315 /* ?max_exponent@?$numeric_limits@M@std@@2HB -> public: static int const std::numeric_limits<float>::max_exponent */
316 const int std_numeric_limits_float_max_exponent = FLT_MAX_EXP;
317
318 /* ?max_exponent@?$numeric_limits@N@std@@2HB -> public: static int const std::numeric_limits<double>::max_exponent */
319 const int std_numeric_limits_double_max_exponent = DBL_MAX_EXP;
320
321 /* ?max_exponent@?$numeric_limits@O@std@@2HB -> public: static int const std::numeric_limits<long double>::max_exponent */
322 const int std_numeric_limits_long_double_max_exponent = LDBL_MAX_EXP;
323
324 /* ?max_exponent@_Num_base@std@@2HB -> public: static int const std::_Num_base::max_exponent */
325 const int std_Num_base_max_exponent = 0;
326
327 /* ?min_exponent10@?$numeric_limits@M@std@@2HB -> public: static int const std::numeric_limits<float>::min_exponent10 */
328 const int std_numeric_limits_float_min_exponent10 = FLT_MIN_10_EXP;
329
330 /* ?min_exponent10@?$numeric_limits@N@std@@2HB -> public: static int const std::numeric_limits<double>::min_exponent10 */
331 const int std_numeric_limits_double_min_exponent10 = DBL_MIN_10_EXP;
332
333 /* ?min_exponent10@?$numeric_limits@O@std@@2HB -> public: static int const std::numeric_limits<long double>::min_exponent10 */
334 const int std_numeric_limits_long_double_min_exponent10 = LDBL_MIN_10_EXP;
335
336 /* ?min_exponent10@_Num_base@std@@2HB -> public: static int const std::_Num_base::min_exponent10 */
337 const int std_Num_base_min_exponent10 = 0;
338
339 /* ?min_exponent@?$numeric_limits@M@std@@2HB -> public: static int const std::numeric_limits<float>::min_exponent */
340 const int std_numeric_limits_float_min_exponent = FLT_MIN_EXP;
341
342 /* ?min_exponent@?$numeric_limits@N@std@@2HB -> public: static int const std::numeric_limits<double>::min_exponent */
343 const int std_numeric_limits_double_min_exponent = DBL_MIN_EXP;
344
345 /* ?min_exponent@?$numeric_limits@O@std@@2HB -> public: static int const std::numeric_limits<long double>::min_exponent */
346 const int std_numeric_limits_long_double_min_exponent = LDBL_MIN_EXP;
347
348 /* ?min_exponent@_Num_base@std@@2HB -> public: static int const std::_Num_base::min_exponent */
349 const int std_Num_base_min_exponent = 0;
350
351 /* ?radix@_Num_base@std@@2HB -> public: static int const std::_Num_base::radix */
352 const int std_Num_base_radix = 0;
353
354 /* ?radix@_Num_float_base@std@@2HB -> public: static int const std::_Num_float_base::radix */
355 const int std_Num_float_base_radix = FLT_RADIX;
356
357 /* ?radix@_Num_int_base@std@@2HB -> public: static int const std::_Num_int_base::radix */
358 const int std_Num_int_base_radix = 2;
359
360 /* ?round_style@_Num_base@std@@2W4float_round_style@2@B -> public: static enum std::float_round_style const std::_Num_base::round_style */
361 const enum std_float_round_style std_Num_base_round_style = round_toward_zero;
362
363 /* ?round_style@_Num_float_base@std@@2W4float_round_style@2@B -> public: static enum std::float_round_style const std::_Num_float_base::round_style */
364 const enum std_float_round_style std_Num_float_base_round_style = round_to_nearest;
365
366 /* ?tinyness_before@_Num_base@std@@2_NB -> public: static bool const  std::_Num_base::tinyness_before */
367 const BOOLEAN std_Num_base_tinyness_before = FALSE;
368
369 /* ?tinyness_before@_Num_float_base@std@@2_NB -> public: static bool const  std::_Num_float_base::tinyness_before */
370 const BOOLEAN std_Num_float_base_tinyness_before = TRUE;
371
372 /* ?traps@_Num_base@std@@2_NB -> public: static bool const  std::_Num_base::traps */
373 const BOOLEAN std_Num_base_traps = FALSE;
374
375 /* ?traps@_Num_float_base@std@@2_NB -> public: static bool const  std::_Num_float_base::traps */
376 const BOOLEAN std_Num_float_base_traps = TRUE;
377
378 /* ??4?$numeric_limits@C@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<signed char> & __thiscall std::numeric_limits<signed char>::operator=(class std::numeric_limits<signed char> const &) */
379 /* ??4?$numeric_limits@C@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<signed char> & __ptr64 __cdecl std::numeric_limits<signed char>::operator=(class std::numeric_limits<signed char> const & __ptr64) __ptr64 */
380 /* ??4?$numeric_limits@D@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<char> & __thiscall std::numeric_limits<char>::operator=(class std::numeric_limits<char> const &) */
381 /* ??4?$numeric_limits@D@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<char> & __ptr64 __cdecl std::numeric_limits<char>::operator=(class std::numeric_limits<char> const & __ptr64) __ptr64 */
382 /* ??4?$numeric_limits@E@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<unsigned char> & __thiscall std::numeric_limits<unsigned char>::operator=(class std::numeric_limits<unsigned char> const &) */
383 /* ??4?$numeric_limits@E@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<unsigned char> & __ptr64 __cdecl std::numeric_limits<unsigned char>::operator=(class std::numeric_limits<unsigned char> const & __ptr64) __ptr64 */
384 /* ??4?$numeric_limits@F@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<short> & __thiscall std::numeric_limits<short>::operator=(class std::numeric_limits<short> const &) */
385 /* ??4?$numeric_limits@F@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<short> & __ptr64 __cdecl std::numeric_limits<short>::operator=(class std::numeric_limits<short> const & __ptr64) __ptr64 */
386 /* ??4?$numeric_limits@G@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<unsigned short> & __thiscall std::numeric_limits<unsigned short>::operator=(class std::numeric_limits<unsigned short> const &) */
387 /* ??4?$numeric_limits@G@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<unsigned short> & __ptr64 __cdecl std::numeric_limits<unsigned short>::operator=(class std::numeric_limits<unsigned short> const & __ptr64) __ptr64 */
388 /* ??4?$numeric_limits@H@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<int> & __thiscall std::numeric_limits<int>::operator=(class std::numeric_limits<int> const &) */
389 /* ??4?$numeric_limits@H@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<int> & __ptr64 __cdecl std::numeric_limits<int>::operator=(class std::numeric_limits<int> const & __ptr64) __ptr64 */
390 /* ??4?$numeric_limits@I@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<unsigned int> & __thiscall std::numeric_limits<unsigned int>::operator=(class std::numeric_limits<unsigned int> const &) */
391 /* ??4?$numeric_limits@I@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<unsigned int> & __ptr64 __cdecl std::numeric_limits<unsigned int>::operator=(class std::numeric_limits<unsigned int> const & __ptr64) __ptr64 */
392 /* ??4?$numeric_limits@J@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<long> & __thiscall std::numeric_limits<long>::operator=(class std::numeric_limits<long> const &) */
393 /* ??4?$numeric_limits@J@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<long> & __ptr64 __cdecl std::numeric_limits<long>::operator=(class std::numeric_limits<long> const & __ptr64) __ptr64 */
394 /* ??4?$numeric_limits@K@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<unsigned long> & __thiscall std::numeric_limits<unsigned long>::operator=(class std::numeric_limits<unsigned long> const &) */
395 /* ??4?$numeric_limits@K@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<unsigned long> & __ptr64 __cdecl std::numeric_limits<unsigned long>::operator=(class std::numeric_limits<unsigned long> const & __ptr64) __ptr64 */
396 /* ??4?$numeric_limits@M@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<float> & __thiscall std::numeric_limits<float>::operator=(class std::numeric_limits<float> const &) */
397 /* ??4?$numeric_limits@M@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<float> & __ptr64 __cdecl std::numeric_limits<float>::operator=(class std::numeric_limits<float> const & __ptr64) __ptr64 */
398 /* ??4?$numeric_limits@N@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<double> & __thiscall std::numeric_limits<double>::operator=(class std::numeric_limits<double> const &) */
399 /* ??4?$numeric_limits@N@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<double> & __ptr64 __cdecl std::numeric_limits<double>::operator=(class std::numeric_limits<double> const & __ptr64) __ptr64 */
400 /* ??4?$numeric_limits@O@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<long double> & __thiscall std::numeric_limits<long double>::operator=(class std::numeric_limits<long double> const &) */
401 /* ??4?$numeric_limits@O@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<long double> & __ptr64 __cdecl std::numeric_limits<long double>::operator=(class std::numeric_limits<long double> const & __ptr64) __ptr64 */
402 /* ??4?$numeric_limits@_J@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<__int64> & __thiscall std::numeric_limits<__int64>::operator=(class std::numeric_limits<__int64> const &) */
403 /* ??4?$numeric_limits@_J@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<__int64> & __ptr64 __cdecl std::numeric_limits<__int64>::operator=(class std::numeric_limits<__int64> const & __ptr64) __ptr64 */
404 /* ??4?$numeric_limits@_K@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<unsigned __int64> & __thiscall std::numeric_limits<unsigned __int64>::operator=(class std::numeric_limits<unsigned __int64> const &) */
405 /* ??4?$numeric_limits@_K@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<unsigned __int64> & __ptr64 __cdecl std::numeric_limits<unsigned __int64>::operator=(class std::numeric_limits<unsigned __int64> const & __ptr64) __ptr64 */
406 /* ??4?$numeric_limits@_N@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<bool> & __thiscall std::numeric_limits<bool>::operator=(class std::numeric_limits<bool> const &) */
407 /* ??4?$numeric_limits@_N@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<bool> & __ptr64 __cdecl std::numeric_limits<bool>::operator=(class std::numeric_limits<bool> const & __ptr64) __ptr64 */
408 /* ??4?$numeric_limits@_W@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<wchar_t> & __thiscall std::numeric_limits<wchar_t>::operator=(class std::numeric_limits<wchar_t> const &) */
409 /* ??4?$numeric_limits@_W@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<wchar_t> & __ptr64 __cdecl std::numeric_limits<wchar_t>::operator=(class std::numeric_limits<wchar_t> const & __ptr64) __ptr64 */
410 /* ??4_Num_base@std@@QAEAAU01@ABU01@@Z -> public: struct std::_Num_base & __thiscall std::_Num_base::operator=(struct std::_Num_base const &) */
411 /* ??4_Num_base@std@@QEAAAEAU01@AEBU01@@Z -> public: struct std::_Num_base & __ptr64 __cdecl std::_Num_base::operator=(struct std::_Num_base const & __ptr64) __ptr64 */
412 /* ??4_Num_float_base@std@@QAEAAU01@ABU01@@Z -> public: struct std::_Num_float_base & __thiscall std::_Num_float_base::operator=(struct std::_Num_float_base const &) */
413 /* ??4_Num_float_base@std@@QEAAAEAU01@AEBU01@@Z -> public: struct std::_Num_float_base & __ptr64 __cdecl std::_Num_float_base::operator=(struct std::_Num_float_base const & __ptr64) __ptr64 */
414 /* ??4_Num_int_base@std@@QAEAAU01@ABU01@@Z -> public: struct std::_Num_int_base & __thiscall std::_Num_int_base::operator=(struct std::_Num_int_base const &) */
415 /* ??4_Num_int_base@std@@QEAAAEAU01@AEBU01@@Z -> public: struct std::_Num_int_base & __ptr64 __cdecl std::_Num_int_base::operator=(struct std::_Num_int_base const & __ptr64) __ptr64 */
416 DEFINE_THISCALL_WRAPPER( std_Num_base_op_assign, 8 )
417 std_Num_base * __thiscall std_Num_base_op_assign( std_Num_base *this, std_Num_base *right )
418 {
419     return this;
420 }
421
422 /* ?denorm_min@?$numeric_limits@C@std@@SACXZ -> public: static signed char __cdecl std::numeric_limits<signed char>::denorm_min(void) */
423 signed char __cdecl std_numeric_limits_signed_char_denorm_min(void) { return 0; }
424
425 /* ?denorm_min@?$numeric_limits@D@std@@SADXZ -> public: static char __cdecl std::numeric_limits<char>::denorm_min(void) */
426 char __cdecl std_numeric_limits_char_denorm_min(void) { return 0; }
427
428 /* ?denorm_min@?$numeric_limits@E@std@@SAEXZ -> public: static unsigned char __cdecl std::numeric_limits<unsigned char>::denorm_min(void) */
429 unsigned char __cdecl std_numeric_limits_unsigned_char_denorm_min(void) { return 0; }
430
431 /* ?denorm_min@?$numeric_limits@F@std@@SAFXZ -> public: static short __cdecl std::numeric_limits<short>::denorm_min(void) */
432 short __cdecl std_numeric_limits_short_denorm_min(void) { return 0; }
433
434 /* ?denorm_min@?$numeric_limits@G@std@@SAGXZ -> public: static unsigned short __cdecl std::numeric_limits<unsigned short>::denorm_min(void) */
435 unsigned short __cdecl std_numeric_limits_unsigned_short_denorm_min(void) { return 0; }
436
437 /* ?denorm_min@?$numeric_limits@H@std@@SAHXZ -> public: static int __cdecl std::numeric_limits<int>::denorm_min(void) */
438 int __cdecl std_numeric_limits_int_denorm_min(void) { return 0; }
439
440 /* ?denorm_min@?$numeric_limits@I@std@@SAIXZ -> public: static unsigned int __cdecl std::numeric_limits<unsigned int>::denorm_min(void) */
441 unsigned int __cdecl std_numeric_limits_unsigned_int_denorm_min(void) { return 0; }
442
443 /* ?denorm_min@?$numeric_limits@J@std@@SAJXZ -> public: static long __cdecl std::numeric_limits<long>::denorm_min(void) */
444 LONG __cdecl std_numeric_limits_long_denorm_min(void) { return 0; }
445
446 /* ?denorm_min@?$numeric_limits@K@std@@SAKXZ -> public: static unsigned long __cdecl std::numeric_limits<unsigned long>::denorm_min(void) */
447 ULONG __cdecl std_numeric_limits_unsigned_long_denorm_min(void) { return 0; }
448
449 /* ?denorm_min@?$numeric_limits@M@std@@SAMXZ -> public: static float __cdecl std::numeric_limits<float>::denorm_min(void) */
450 float __cdecl std_numeric_limits_float_denorm_min(void) { return *(float *)&_FDenorm; }
451
452 /* ?denorm_min@?$numeric_limits@N@std@@SANXZ -> public: static double __cdecl std::numeric_limits<double>::denorm_min(void) */
453 double __cdecl std_numeric_limits_double_denorm_min(void) { return *(double *)&_Denorm; }
454
455 /* ?denorm_min@?$numeric_limits@O@std@@SAOXZ -> public: static long double __cdecl std::numeric_limits<long double>::denorm_min(void) */
456 LDOUBLE __cdecl std_numeric_limits_long_double_denorm_min(void) { return *(LDOUBLE *)&_LDenorm; }
457
458 /* ?denorm_min@?$numeric_limits@_J@std@@SA_JXZ -> public: static __int64 __cdecl std::numeric_limits<__int64>::denorm_min(void) */
459 __int64 __cdecl std_numeric_limits_int64_denorm_min(void) { return 0; }
460
461 /* ?denorm_min@?$numeric_limits@_K@std@@SA_KXZ -> public: static unsigned __int64 __cdecl std::numeric_limits<unsigned __int64>::denorm_min(void) */
462 unsigned __int64 __cdecl std_numeric_limits_unsigned_int64_denorm_min(void) { return 0; }
463
464 /* ?denorm_min@?$numeric_limits@_N@std@@SA_NXZ -> public: static bool __cdecl std::numeric_limits<bool>::denorm_min(void) */
465 BOOLEAN __cdecl std_numeric_limits_bool_denorm_min(void) { return 0; }
466
467 /* ?denorm_min@?$numeric_limits@_W@std@@SA_WXZ -> public: static wchar_t __cdecl std::numeric_limits<wchar_t>::denorm_min(void) */
468 WCHAR __cdecl std_numeric_limits_wchar_t_denorm_min(void) { return 0; }
469
470 /* ?epsilon@?$numeric_limits@C@std@@SACXZ -> public: static signed char __cdecl std::numeric_limits<signed char>::epsilon(void) */
471 signed char __cdecl std_numeric_limits_signed_char_epsilon(void) { return 0; }
472
473 /* ?epsilon@?$numeric_limits@D@std@@SADXZ -> public: static char __cdecl std::numeric_limits<char>::epsilon(void) */
474 char __cdecl std_numeric_limits_char_epsilon(void) { return 0; }
475
476 /* ?epsilon@?$numeric_limits@E@std@@SAEXZ -> public: static unsigned char __cdecl std::numeric_limits<unsigned char>::epsilon(void) */
477 unsigned char __cdecl std_numeric_limits_unsigned_char_epsilon(void) { return 0; }
478
479 /* ?epsilon@?$numeric_limits@F@std@@SAFXZ -> public: static short __cdecl std::numeric_limits<short>::epsilon(void) */
480 short __cdecl std_numeric_limits_short_epsilon(void) { return 0; }
481
482 /* ?epsilon@?$numeric_limits@G@std@@SAGXZ -> public: static unsigned short __cdecl std::numeric_limits<unsigned short>::epsilon(void) */
483 unsigned short __cdecl std_numeric_limits_unsigned_short_epsilon(void) { return 0; }
484
485 /* ?epsilon@?$numeric_limits@H@std@@SAHXZ -> public: static int __cdecl std::numeric_limits<int>::epsilon(void) */
486 int __cdecl std_numeric_limits_int_epsilon(void) { return 0; }
487
488 /* ?epsilon@?$numeric_limits@I@std@@SAIXZ -> public: static unsigned int __cdecl std::numeric_limits<unsigned int>::epsilon(void) */
489 unsigned int __cdecl std_numeric_limits_unsigned_int_epsilon(void) { return 0; }
490
491 /* ?epsilon@?$numeric_limits@J@std@@SAJXZ -> public: static long __cdecl std::numeric_limits<long>::epsilon(void) */
492 LONG __cdecl std_numeric_limits_long_epsilon(void) { return 0; }
493
494 /* ?epsilon@?$numeric_limits@K@std@@SAKXZ -> public: static unsigned long __cdecl std::numeric_limits<unsigned long>::epsilon(void) */
495 ULONG __cdecl std_numeric_limits_unsigned_long_epsilon(void) { return 0; }
496
497 /* ?epsilon@?$numeric_limits@M@std@@SAMXZ -> public: static float __cdecl std::numeric_limits<float>::epsilon(void) */
498 float __cdecl std_numeric_limits_float_epsilon(void) { return _FEps; }
499
500 /* ?epsilon@?$numeric_limits@N@std@@SANXZ -> public: static double __cdecl std::numeric_limits<double>::epsilon(void) */
501 double __cdecl std_numeric_limits_double_epsilon(void) { return _Eps; }
502
503 /* ?epsilon@?$numeric_limits@O@std@@SAOXZ -> public: static long double __cdecl std::numeric_limits<long double>::epsilon(void) */
504 LDOUBLE __cdecl std_numeric_limits_long_double_epsilon(void) { return _LEps; }
505
506 /* ?epsilon@?$numeric_limits@_J@std@@SA_JXZ -> public: static __int64 __cdecl std::numeric_limits<__int64>::epsilon(void) */
507 __int64 __cdecl std_numeric_limits_int64_epsilon(void) { return 0; }
508
509 /* ?epsilon@?$numeric_limits@_K@std@@SA_KXZ -> public: static unsigned __int64 __cdecl std::numeric_limits<unsigned __int64>::epsilon(void) */
510 unsigned __int64 __cdecl std_numeric_limits_unsigned_int64_epsilon(void) { return 0; }
511
512 /* ?epsilon@?$numeric_limits@_N@std@@SA_NXZ -> public: static bool __cdecl std::numeric_limits<bool>::epsilon(void) */
513 BOOLEAN __cdecl std_numeric_limits_bool_epsilon(void) { return 0; }
514
515 /* ?epsilon@?$numeric_limits@_W@std@@SA_WXZ -> public: static wchar_t __cdecl std::numeric_limits<wchar_t>::epsilon(void) */
516 WCHAR __cdecl std_numeric_limits_wchar_t_epsilon(void) { return 0; }
517
518 /* ?infinity@?$numeric_limits@C@std@@SACXZ -> public: static signed char __cdecl std::numeric_limits<signed char>::infinity(void) */
519 signed char __cdecl std_numeric_limits_signed_char_infinity(void) { return 0; }
520
521 /* ?infinity@?$numeric_limits@D@std@@SADXZ -> public: static char __cdecl std::numeric_limits<char>::infinity(void) */
522 char __cdecl std_numeric_limits_char_infinity(void) { return 0; }
523
524 /* ?infinity@?$numeric_limits@E@std@@SAEXZ -> public: static unsigned char __cdecl std::numeric_limits<unsigned char>::infinity(void) */
525 unsigned char __cdecl std_numeric_limits_unsigned_char_infinity(void) { return 0; }
526
527 /* ?infinity@?$numeric_limits@F@std@@SAFXZ -> public: static short __cdecl std::numeric_limits<short>::infinity(void) */
528 short __cdecl std_numeric_limits_short_infinity(void) { return 0; }
529
530 /* ?infinity@?$numeric_limits@G@std@@SAGXZ -> public: static unsigned short __cdecl std::numeric_limits<unsigned short>::infinity(void) */
531 unsigned short __cdecl std_numeric_limits_unsigned_short_infinity(void) { return 0; }
532
533 /* ?infinity@?$numeric_limits@H@std@@SAHXZ -> public: static int __cdecl std::numeric_limits<int>::infinity(void) */
534 int __cdecl std_numeric_limits_int_infinity(void) { return 0; }
535
536 /* ?infinity@?$numeric_limits@I@std@@SAIXZ -> public: static unsigned int __cdecl std::numeric_limits<unsigned int>::infinity(void) */
537 unsigned int __cdecl std_numeric_limits_unsigned_int_infinity(void) { return 0; }
538
539 /* ?infinity@?$numeric_limits@J@std@@SAJXZ -> public: static long __cdecl std::numeric_limits<long>::infinity(void) */
540 LONG __cdecl std_numeric_limits_long_infinity(void) { return 0; }
541
542 /* ?infinity@?$numeric_limits@K@std@@SAKXZ -> public: static unsigned long __cdecl std::numeric_limits<unsigned long>::infinity(void) */
543 ULONG __cdecl std_numeric_limits_unsigned_long_infinity(void) { return 0; }
544
545 /* ?infinity@?$numeric_limits@M@std@@SAMXZ -> public: static float __cdecl std::numeric_limits<float>::infinity(void) */
546 float __cdecl std_numeric_limits_float_infinity(void) { return *(float *)&_FInf; }
547
548 /* ?infinity@?$numeric_limits@N@std@@SANXZ -> public: static double __cdecl std::numeric_limits<double>::infinity(void) */
549 double __cdecl std_numeric_limits_double_infinity(void) { return *(double *)&_Inf; }
550
551 /* ?infinity@?$numeric_limits@O@std@@SAOXZ -> public: static long double __cdecl std::numeric_limits<long double>::infinity(void) */
552 LDOUBLE __cdecl std_numeric_limits_long_double_infinity(void) { return *(LDOUBLE *)&_LInf; }
553
554 /* ?infinity@?$numeric_limits@_J@std@@SA_JXZ -> public: static __int64 __cdecl std::numeric_limits<__int64>::infinity(void) */
555 __int64 __cdecl std_numeric_limits_int64_infinity(void) { return 0; }
556
557 /* ?infinity@?$numeric_limits@_K@std@@SA_KXZ -> public: static unsigned __int64 __cdecl std::numeric_limits<unsigned __int64>::infinity(void) */
558 unsigned __int64 __cdecl std_numeric_limits_unsigned_int64_infinity(void) { return 0; }
559
560 /* ?infinity@?$numeric_limits@_N@std@@SA_NXZ -> public: static bool __cdecl std::numeric_limits<bool>::infinity(void) */
561 BOOLEAN __cdecl std_numeric_limits_bool_infinity(void) { return 0; }
562
563 /* ?infinity@?$numeric_limits@_W@std@@SA_WXZ -> public: static wchar_t __cdecl std::numeric_limits<wchar_t>::infinity(void) */
564 WCHAR __cdecl std_numeric_limits_wchar_t_infinity(void) { return 0; }
565
566 /* ?max@?$numeric_limits@C@std@@SACXZ -> public: static signed char __cdecl std::numeric_limits<signed char>::max(void) */
567 signed char __cdecl std_numeric_limits_signed_char_max(void) { return SCHAR_MAX; }
568
569 /* ?max@?$numeric_limits@D@std@@SADXZ -> public: static char __cdecl std::numeric_limits<char>::max(void) */
570 char __cdecl std_numeric_limits_char_max(void) { return CHAR_MAX; }
571
572 /* ?max@?$numeric_limits@E@std@@SAEXZ -> public: static unsigned char __cdecl std::numeric_limits<unsigned char>::max(void) */
573 unsigned char __cdecl std_numeric_limits_unsigned_char_max(void) { return UCHAR_MAX; }
574
575 /* ?max@?$numeric_limits@F@std@@SAFXZ -> public: static short __cdecl std::numeric_limits<short>::max(void) */
576 short __cdecl std_numeric_limits_short_max(void) { return SHRT_MAX; }
577
578 /* ?max@?$numeric_limits@G@std@@SAGXZ -> public: static unsigned short __cdecl std::numeric_limits<unsigned short>::max(void) */
579 unsigned short __cdecl std_numeric_limits_unsigned_short_max(void) { return USHRT_MAX; }
580
581 /* ?max@?$numeric_limits@H@std@@SAHXZ -> public: static int __cdecl std::numeric_limits<int>::max(void) */
582 int __cdecl std_numeric_limits_int_max(void) { return INT_MAX; }
583
584 /* ?max@?$numeric_limits@I@std@@SAIXZ -> public: static unsigned int __cdecl std::numeric_limits<unsigned int>::max(void) */
585 unsigned int __cdecl std_numeric_limits_unsigned_int_max(void) { return UINT_MAX; }
586
587 /* ?max@?$numeric_limits@J@std@@SAJXZ -> public: static long __cdecl std::numeric_limits<long>::max(void) */
588 LONG __cdecl std_numeric_limits_long_max(void) { return LONG_MAX; }
589
590 /* ?max@?$numeric_limits@K@std@@SAKXZ -> public: static unsigned long __cdecl std::numeric_limits<unsigned long>::max(void) */
591 ULONG __cdecl std_numeric_limits_unsigned_long_max(void) { return ULONG_MAX; }
592
593 /* ?max@?$numeric_limits@M@std@@SAMXZ -> public: static float __cdecl std::numeric_limits<float>::max(void) */
594 float __cdecl std_numeric_limits_float_max(void) { return FLT_MAX; }
595
596 /* ?max@?$numeric_limits@N@std@@SANXZ -> public: static double __cdecl std::numeric_limits<double>::max(void) */
597 double __cdecl std_numeric_limits_double_max(void) { return DBL_MAX; }
598
599 /* ?max@?$numeric_limits@O@std@@SAOXZ -> public: static long double __cdecl std::numeric_limits<long double>::max(void) */
600 LDOUBLE __cdecl std_numeric_limits_long_double_max(void) { return LDBL_MAX; }
601
602 /* ?max@?$numeric_limits@_J@std@@SA_JXZ -> public: static __int64 __cdecl std::numeric_limits<__int64>::max(void) */
603 __int64 __cdecl std_numeric_limits_int64_max(void) { return I64_MAX; }
604
605 /* ?max@?$numeric_limits@_K@std@@SA_KXZ -> public: static unsigned __int64 __cdecl std::numeric_limits<unsigned __int64>::max(void) */
606 unsigned __int64 __cdecl std_numeric_limits_unsigned_int64_max(void) { return UI64_MAX; }
607
608 /* ?max@?$numeric_limits@_N@std@@SA_NXZ -> public: static bool __cdecl std::numeric_limits<bool>::max(void) */
609 BOOLEAN __cdecl std_numeric_limits_bool_max(void) { return 1; }
610
611 /* ?max@?$numeric_limits@_W@std@@SA_WXZ -> public: static wchar_t __cdecl std::numeric_limits<wchar_t>::max(void) */
612 WCHAR __cdecl std_numeric_limits_wchar_t_max(void) { return USHRT_MAX; }
613
614 /* ?min@?$numeric_limits@C@std@@SACXZ -> public: static signed char __cdecl std::numeric_limits<signed char>::min(void) */
615 signed char __cdecl std_numeric_limits_signed_char_min(void) { return SCHAR_MIN; }
616
617 /* ?min@?$numeric_limits@D@std@@SADXZ -> public: static char __cdecl std::numeric_limits<char>::min(void) */
618 char __cdecl std_numeric_limits_char_min(void) { return CHAR_MIN; }
619
620 /* ?min@?$numeric_limits@E@std@@SAEXZ -> public: static unsigned char __cdecl std::numeric_limits<unsigned char>::min(void) */
621 unsigned char __cdecl std_numeric_limits_unsigned_char_min(void) { return 0; }
622
623 /* ?min@?$numeric_limits@F@std@@SAFXZ -> public: static short __cdecl std::numeric_limits<short>::min(void) */
624 short __cdecl std_numeric_limits_short_min(void) { return SHRT_MIN; }
625
626 /* ?min@?$numeric_limits@G@std@@SAGXZ -> public: static unsigned short __cdecl std::numeric_limits<unsigned short>::min(void) */
627 unsigned short __cdecl std_numeric_limits_unsigned_short_min(void) { return 0; }
628
629 /* ?min@?$numeric_limits@H@std@@SAHXZ -> public: static int __cdecl std::numeric_limits<int>::min(void) */
630 int __cdecl std_numeric_limits_int_min(void) { return INT_MIN; }
631
632 /* ?min@?$numeric_limits@I@std@@SAIXZ -> public: static unsigned int __cdecl std::numeric_limits<unsigned int>::min(void) */
633 unsigned int __cdecl std_numeric_limits_unsigned_int_min(void) { return 0; }
634
635 /* ?min@?$numeric_limits@J@std@@SAJXZ -> public: static long __cdecl std::numeric_limits<long>::min(void) */
636 LONG __cdecl std_numeric_limits_long_min(void) { return LONG_MIN; }
637
638 /* ?min@?$numeric_limits@K@std@@SAKXZ -> public: static unsigned long __cdecl std::numeric_limits<unsigned long>::min(void) */
639 ULONG __cdecl std_numeric_limits_unsigned_long_min(void) { return 0; }
640
641 /* ?min@?$numeric_limits@M@std@@SAMXZ -> public: static float __cdecl std::numeric_limits<float>::min(void) */
642 float __cdecl std_numeric_limits_float_min(void) { return FLT_MIN; }
643
644 /* ?min@?$numeric_limits@N@std@@SANXZ -> public: static double __cdecl std::numeric_limits<double>::min(void) */
645 double __cdecl std_numeric_limits_double_min(void) { return DBL_MIN; }
646
647 /* ?min@?$numeric_limits@O@std@@SAOXZ -> public: static long double __cdecl std::numeric_limits<long double>::min(void) */
648 LDOUBLE __cdecl std_numeric_limits_long_double_min(void) { return LDBL_MIN; }
649
650 /* ?min@?$numeric_limits@_J@std@@SA_JXZ -> public: static __int64 __cdecl std::numeric_limits<__int64>::min(void) */
651 __int64 __cdecl std_numeric_limits_int64_min(void) { return I64_MIN; }
652
653 /* ?min@?$numeric_limits@_K@std@@SA_KXZ -> public: static unsigned __int64 __cdecl std::numeric_limits<unsigned __int64>::min(void) */
654 unsigned __int64 __cdecl std_numeric_limits_unsigned_int64_min(void) { return 0; }
655
656 /* ?min@?$numeric_limits@_N@std@@SA_NXZ -> public: static bool __cdecl std::numeric_limits<bool>::min(void) */
657 BOOLEAN __cdecl std_numeric_limits_bool_min(void) { return 0; }
658
659 /* ?min@?$numeric_limits@_W@std@@SA_WXZ -> public: static wchar_t __cdecl std::numeric_limits<wchar_t>::min(void) */
660 WCHAR __cdecl std_numeric_limits_wchar_t_min(void) { return 0; }
661
662 /* ?quiet_NaN@?$numeric_limits@C@std@@SACXZ -> public: static signed char __cdecl std::numeric_limits<signed char>::quiet_NaN(void) */
663 signed char __cdecl std_numeric_limits_signed_char_quiet_NaN(void) { return 0; }
664
665 /* ?quiet_NaN@?$numeric_limits@D@std@@SADXZ -> public: static char __cdecl std::numeric_limits<char>::quiet_NaN(void) */
666 char __cdecl std_numeric_limits_char_quiet_NaN(void) { return 0; }
667
668 /* ?quiet_NaN@?$numeric_limits@E@std@@SAEXZ -> public: static unsigned char __cdecl std::numeric_limits<unsigned char>::quiet_NaN(void) */
669 unsigned char __cdecl std_numeric_limits_unsigned_char_quiet_NaN(void) { return 0; }
670
671 /* ?quiet_NaN@?$numeric_limits@F@std@@SAFXZ -> public: static short __cdecl std::numeric_limits<short>::quiet_NaN(void) */
672 short __cdecl std_numeric_limits_short_quiet_NaN(void) { return 0; }
673
674 /* ?quiet_NaN@?$numeric_limits@G@std@@SAGXZ -> public: static unsigned short __cdecl std::numeric_limits<unsigned short>::quiet_NaN(void) */
675 unsigned short __cdecl std_numeric_limits_unsigned_short_quiet_NaN(void) { return 0; }
676
677 /* ?quiet_NaN@?$numeric_limits@H@std@@SAHXZ -> public: static int __cdecl std::numeric_limits<int>::quiet_NaN(void) */
678 int __cdecl std_numeric_limits_int_quiet_NaN(void) { return 0; }
679
680 /* ?quiet_NaN@?$numeric_limits@I@std@@SAIXZ -> public: static unsigned int __cdecl std::numeric_limits<unsigned int>::quiet_NaN(void) */
681 unsigned int __cdecl std_numeric_limits_unsigned_int_quiet_NaN(void) { return 0; }
682
683 /* ?quiet_NaN@?$numeric_limits@J@std@@SAJXZ -> public: static long __cdecl std::numeric_limits<long>::quiet_NaN(void) */
684 LONG __cdecl std_numeric_limits_long_quiet_NaN(void) { return 0; }
685
686 /* ?quiet_NaN@?$numeric_limits@K@std@@SAKXZ -> public: static unsigned long __cdecl std::numeric_limits<unsigned long>::quiet_NaN(void) */
687 ULONG __cdecl std_numeric_limits_unsigned_long_quiet_NaN(void) { return 0; }
688
689 /* ?quiet_NaN@?$numeric_limits@M@std@@SAMXZ -> public: static float __cdecl std::numeric_limits<float>::quiet_NaN(void) */
690 float __cdecl std_numeric_limits_float_quiet_NaN(void) { return *(float *)&_FNan; }
691
692 /* ?quiet_NaN@?$numeric_limits@N@std@@SANXZ -> public: static double __cdecl std::numeric_limits<double>::quiet_NaN(void) */
693 double __cdecl std_numeric_limits_double_quiet_NaN(void) { return *(double *)&_Nan; }
694
695 /* ?quiet_NaN@?$numeric_limits@O@std@@SAOXZ -> public: static long double __cdecl std::numeric_limits<long double>::quiet_NaN(void) */
696 LDOUBLE __cdecl std_numeric_limits_long_double_quiet_NaN(void) { return *(LDOUBLE *)&_LNan; }
697
698 /* ?quiet_NaN@?$numeric_limits@_J@std@@SA_JXZ -> public: static __int64 __cdecl std::numeric_limits<__int64>::quiet_NaN(void) */
699 __int64 __cdecl std_numeric_limits_int64_quiet_NaN(void) { return 0; }
700
701 /* ?quiet_NaN@?$numeric_limits@_K@std@@SA_KXZ -> public: static unsigned __int64 __cdecl std::numeric_limits<unsigned __int64>::quiet_NaN(void) */
702 unsigned __int64 __cdecl std_numeric_limits_unsigned_int64_quiet_NaN(void) { return 0; }
703
704 /* ?quiet_NaN@?$numeric_limits@_N@std@@SA_NXZ -> public: static bool __cdecl std::numeric_limits<bool>::quiet_NaN(void) */
705 BOOLEAN __cdecl std_numeric_limits_bool_quiet_NaN(void) { return 0; }
706
707 /* ?quiet_NaN@?$numeric_limits@_W@std@@SA_WXZ -> public: static wchar_t __cdecl std::numeric_limits<wchar_t>::quiet_NaN(void) */
708 WCHAR __cdecl std_numeric_limits_wchar_t_quiet_NaN(void) { return 0; }
709
710 /* ?round_error@?$numeric_limits@C@std@@SACXZ -> public: static signed char __cdecl std::numeric_limits<signed char>::round_error(void) */
711 signed char __cdecl std_numeric_limits_signed_char_round_error(void) { return 0; }
712
713 /* ?round_error@?$numeric_limits@D@std@@SADXZ -> public: static char __cdecl std::numeric_limits<char>::round_error(void) */
714 char __cdecl std_numeric_limits_char_round_error(void) { return 0; }
715
716 /* ?round_error@?$numeric_limits@E@std@@SAEXZ -> public: static unsigned char __cdecl std::numeric_limits<unsigned char>::round_error(void) */
717 unsigned char __cdecl std_numeric_limits_unsigned_char_round_error(void) { return 0; }
718
719 /* ?round_error@?$numeric_limits@F@std@@SAFXZ -> public: static short __cdecl std::numeric_limits<short>::round_error(void) */
720 short __cdecl std_numeric_limits_short_round_error(void) { return 0; }
721
722 /* ?round_error@?$numeric_limits@G@std@@SAGXZ -> public: static unsigned short __cdecl std::numeric_limits<unsigned short>::round_error(void) */
723 unsigned short __cdecl std_numeric_limits_unsigned_short_round_error(void) { return 0; }
724
725 /* ?round_error@?$numeric_limits@H@std@@SAHXZ -> public: static int __cdecl std::numeric_limits<int>::round_error(void) */
726 int __cdecl std_numeric_limits_int_round_error(void) { return 0; }
727
728 /* ?round_error@?$numeric_limits@I@std@@SAIXZ -> public: static unsigned int __cdecl std::numeric_limits<unsigned int>::round_error(void) */
729 unsigned int __cdecl std_numeric_limits_unsigned_int_round_error(void) { return 0; }
730
731 /* ?round_error@?$numeric_limits@J@std@@SAJXZ -> public: static long __cdecl std::numeric_limits<long>::round_error(void) */
732 LONG __cdecl std_numeric_limits_long_round_error(void) { return 0; }
733
734 /* ?round_error@?$numeric_limits@K@std@@SAKXZ -> public: static unsigned long __cdecl std::numeric_limits<unsigned long>::round_error(void) */
735 ULONG __cdecl std_numeric_limits_unsigned_long_round_error(void) { return 0; }
736
737 /* ?round_error@?$numeric_limits@M@std@@SAMXZ -> public: static float __cdecl std::numeric_limits<float>::round_error(void) */
738 float __cdecl std_numeric_limits_float_round_error(void) { return 0.5; }
739
740 /* ?round_error@?$numeric_limits@N@std@@SANXZ -> public: static double __cdecl std::numeric_limits<double>::round_error(void) */
741 double __cdecl std_numeric_limits_double_round_error(void) { return 0.5; }
742
743 /* ?round_error@?$numeric_limits@O@std@@SAOXZ -> public: static long double __cdecl std::numeric_limits<long double>::round_error(void) */
744 LDOUBLE __cdecl std_numeric_limits_long_double_round_error(void) { return 0.5; }
745
746 /* ?round_error@?$numeric_limits@_J@std@@SA_JXZ -> public: static __int64 __cdecl std::numeric_limits<__int64>::round_error(void) */
747 __int64 __cdecl std_numeric_limits_int64_round_error(void) { return 0; }
748
749 /* ?round_error@?$numeric_limits@_K@std@@SA_KXZ -> public: static unsigned __int64 __cdecl std::numeric_limits<unsigned __int64>::round_error(void) */
750 unsigned __int64 __cdecl std_numeric_limits_unsigned_int64_round_error(void) { return 0; }
751
752 /* ?round_error@?$numeric_limits@_N@std@@SA_NXZ -> public: static bool __cdecl std::numeric_limits<bool>::round_error(void) */
753 BOOLEAN __cdecl std_numeric_limits_bool_round_error(void) { return 0; }
754
755 /* ?round_error@?$numeric_limits@_W@std@@SA_WXZ -> public: static wchar_t __cdecl std::numeric_limits<wchar_t>::round_error(void) */
756 WCHAR __cdecl std_numeric_limits_wchar_t_round_error(void) { return 0; }
757
758 /* ?signaling_NaN@?$numeric_limits@C@std@@SACXZ -> public: static signed char __cdecl std::numeric_limits<signed char>::signaling_NaN(void) */
759 signed char __cdecl std_numeric_limits_signed_char_signaling_NaN(void) { return 0; }
760
761 /* ?signaling_NaN@?$numeric_limits@D@std@@SADXZ -> public: static char __cdecl std::numeric_limits<char>::signaling_NaN(void) */
762 char __cdecl std_numeric_limits_char_signaling_NaN(void) { return 0; }
763
764 /* ?signaling_NaN@?$numeric_limits@E@std@@SAEXZ -> public: static unsigned char __cdecl std::numeric_limits<unsigned char>::signaling_NaN(void) */
765 unsigned char __cdecl std_numeric_limits_unsigned_char_signaling_NaN(void) { return 0; }
766
767 /* ?signaling_NaN@?$numeric_limits@F@std@@SAFXZ -> public: static short __cdecl std::numeric_limits<short>::signaling_NaN(void) */
768 short __cdecl std_numeric_limits_short_signaling_NaN(void) { return 0; }
769
770 /* ?signaling_NaN@?$numeric_limits@G@std@@SAGXZ -> public: static unsigned short __cdecl std::numeric_limits<unsigned short>::signaling_NaN(void) */
771 unsigned short __cdecl std_numeric_limits_unsigned_short_signaling_NaN(void) { return 0; }
772
773 /* ?signaling_NaN@?$numeric_limits@H@std@@SAHXZ -> public: static int __cdecl std::numeric_limits<int>::signaling_NaN(void) */
774 int __cdecl std_numeric_limits_int_signaling_NaN(void) { return 0; }
775
776 /* ?signaling_NaN@?$numeric_limits@I@std@@SAIXZ -> public: static unsigned int __cdecl std::numeric_limits<unsigned int>::signaling_NaN(void) */
777 unsigned int __cdecl std_numeric_limits_unsigned_int_signaling_NaN(void) { return 0; }
778
779 /* ?signaling_NaN@?$numeric_limits@J@std@@SAJXZ -> public: static long __cdecl std::numeric_limits<long>::signaling_NaN(void) */
780 LONG __cdecl std_numeric_limits_long_signaling_NaN(void) { return 0; }
781
782 /* ?signaling_NaN@?$numeric_limits@K@std@@SAKXZ -> public: static unsigned long __cdecl std::numeric_limits<unsigned long>::signaling_NaN(void) */
783 ULONG __cdecl std_numeric_limits_unsigned_long_signaling_NaN(void) { return 0; }
784
785 /* ?signaling_NaN@?$numeric_limits@M@std@@SAMXZ -> public: static float __cdecl std::numeric_limits<float>::signaling_NaN(void) */
786 float __cdecl std_numeric_limits_float_signaling_NaN(void) { return *(float *)&_FSnan; }
787
788 /* ?signaling_NaN@?$numeric_limits@N@std@@SANXZ -> public: static double __cdecl std::numeric_limits<double>::signaling_NaN(void) */
789 double __cdecl std_numeric_limits_double_signaling_NaN(void) { return *(double *)&_Snan; }
790
791 /* ?signaling_NaN@?$numeric_limits@O@std@@SAOXZ -> public: static long double __cdecl std::numeric_limits<long double>::signaling_NaN(void) */
792 LDOUBLE __cdecl std_numeric_limits_long_double_signaling_NaN(void) { return *(LDOUBLE *)&_LSnan; }
793
794 /* ?signaling_NaN@?$numeric_limits@_J@std@@SA_JXZ -> public: static __int64 __cdecl std::numeric_limits<__int64>::signaling_NaN(void) */
795 __int64 __cdecl std_numeric_limits_int64_signaling_NaN(void) { return 0; }
796
797 /* ?signaling_NaN@?$numeric_limits@_K@std@@SA_KXZ -> public: static unsigned __int64 __cdecl std::numeric_limits<unsigned __int64>::signaling_NaN(void) */
798 unsigned __int64 __cdecl std_numeric_limits_unsigned_int64_signaling_NaN(void) { return 0; }
799
800 /* ?signaling_NaN@?$numeric_limits@_N@std@@SA_NXZ -> public: static bool __cdecl std::numeric_limits<bool>::signaling_NaN(void) */
801 BOOLEAN __cdecl std_numeric_limits_bool_signaling_NaN(void) { return 0; }
802
803 /* ?signaling_NaN@?$numeric_limits@_W@std@@SA_WXZ -> public: static wchar_t __cdecl std::numeric_limits<wchar_t>::signaling_NaN(void) */
804 WCHAR __cdecl std_numeric_limits_wchar_t_signaling_NaN(void) { return 0; }
805
806 /* ??4?$_Ctraits@M@std@@QAEAAV01@ABV01@@Z -> public: class std::_Ctraits<float> & __thiscall std::_Ctraits<float>::operator=(class std::_Ctraits<float> const &) */
807 /* ??4?$_Ctraits@M@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::_Ctraits<float> & __ptr64 __cdecl std::_Ctraits<float>::operator=(class std::_Ctraits<float> const & __ptr64) __ptr64 */
808 /* ??4?$_Ctraits@N@std@@QAEAAV01@ABV01@@Z -> public: class std::_Ctraits<double> & __thiscall std::_Ctraits<double>::operator=(class std::_Ctraits<double> const &) */
809 /* ??4?$_Ctraits@N@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::_Ctraits<double> & __ptr64 __cdecl std::_Ctraits<double>::operator=(class std::_Ctraits<double> const & __ptr64) __ptr64 */
810 /* ??4?$_Ctraits@O@std@@QAEAAV01@ABV01@@Z -> public: class std::_Ctraits<long double> & __thiscall std::_Ctraits<long double>::operator=(class std::_Ctraits<long double> const &) */
811 /* ??4?$_Ctraits@O@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::_Ctraits<long double> & __ptr64 __cdecl std::_Ctraits<long double>::operator=(class std::_Ctraits<long double> const & __ptr64) __ptr64 */
812 DEFINE_THISCALL_WRAPPER( std_Ctraits_op_assign, 8 )
813 std_Ctraits * __thiscall std_Ctraits_op_assign( std_Ctraits *this, std_Ctraits *right )
814 {
815     return this;
816 }
817
818 /* ?atan2@?$_Ctraits@M@std@@SAMMM@Z -> public: static float __cdecl std::_Ctraits<float>::atan2(float,float) */
819 float __cdecl std_Ctraits_float_atan2( float y, float x ) { return atan2f( y, x ); }
820
821 /* ?atan2@?$_Ctraits@N@std@@SANNN@Z -> public: static double __cdecl std::_Ctraits<double>::atan2(double,double) */
822 double __cdecl std_Ctraits_double_atan2( double y, double x ) { return atan2( y, x ); }
823
824 /* ?atan2@?$_Ctraits@O@std@@SAOOO@Z -> public: static long double __cdecl std::_Ctraits<long double>::atan2(long double,long double) */
825 LDOUBLE __cdecl std_Ctraits_long_double_atan2( LDOUBLE y, LDOUBLE x ) { return atan2( y, x ); }
826
827 /* ?cos@?$_Ctraits@M@std@@SAMM@Z -> public: static float __cdecl std::_Ctraits<float>::cos(float) */
828 float __cdecl std_Ctraits_float_cos( float x ) { return cosf( x ); }
829
830 /* ?cos@?$_Ctraits@N@std@@SANN@Z -> public: static double __cdecl std::_Ctraits<double>::cos(double) */
831 double __cdecl std_Ctraits_double_cos( double x ) { return cos( x ); }
832
833 /* ?cos@?$_Ctraits@O@std@@SAOO@Z -> public: static long double __cdecl std::_Ctraits<long double>::cos(long double) */
834 LDOUBLE __cdecl std_Ctraits_long_double_cos( LDOUBLE x ) { return cos( x ); }
835
836 /* ?exp@?$_Ctraits@M@std@@SAMM@Z -> public: static float __cdecl std::_Ctraits<float>::exp(float) */
837 float __cdecl std_Ctraits_float_exp( float x ) { return expf( x ); }
838
839 /* ?exp@?$_Ctraits@N@std@@SANN@Z -> public: static double __cdecl std::_Ctraits<double>::exp(double) */
840 double __cdecl std_Ctraits_double_exp( double x ) { return exp( x ); }
841
842 /* ?exp@?$_Ctraits@O@std@@SAOO@Z -> public: static long double __cdecl std::_Ctraits<long double>::exp(long double) */
843 LDOUBLE __cdecl std_Ctraits_long_double_exp( LDOUBLE x ) { return exp( x ); }
844
845 /* ?ldexp@?$_Ctraits@M@std@@SAMMH@Z -> public: static float __cdecl std::_Ctraits<float>::ldexp(float,int) */
846 float __cdecl std_Ctraits_float_ldexp( float x, int y ) { return ldexpf( x, y ); }
847
848 /* ?ldexp@?$_Ctraits@N@std@@SANNH@Z -> public: static double __cdecl std::_Ctraits<double>::ldexp(double,int) */
849 double __cdecl std_Ctraits_double_ldexp( double x, int y ) { return ldexp( x, y ); }
850
851 /* ?ldexp@?$_Ctraits@O@std@@SAOOH@Z -> public: static long double __cdecl std::_Ctraits<long double>::ldexp(long double,int) */
852 LDOUBLE __cdecl std_Ctraits_long_double_ldexp( LDOUBLE x, int y ) { return ldexp( x, y ); }
853
854 /* ?log@?$_Ctraits@M@std@@SAMM@Z -> public: static float __cdecl std::_Ctraits<float>::log(float) */
855 float __cdecl std_Ctraits_float_log( float x ) { return logf( x ); }
856
857 /* ?log@?$_Ctraits@N@std@@SANN@Z -> public: static double __cdecl std::_Ctraits<double>::log(double) */
858 double __cdecl std_Ctraits_double_log( double x ) { return log( x ); }
859
860 /* ?log@?$_Ctraits@O@std@@SAOO@Z -> public: static long double __cdecl std::_Ctraits<long double>::log(long double) */
861 LDOUBLE __cdecl std_Ctraits_long_double_log( LDOUBLE x ) { return log( x ); }
862
863 /* ?pow@?$_Ctraits@M@std@@SAMMM@Z -> public: static float __cdecl std::_Ctraits<float>::pow(float,float) */
864 float __cdecl std_Ctraits_float_pow( float x, float y ) { return powf( x, y ); }
865
866 /* ?pow@?$_Ctraits@N@std@@SANNN@Z -> public: static double __cdecl std::_Ctraits<double>::pow(double,double) */
867 double __cdecl std_Ctraits_double_pow( double x, double y ) { return pow( x, y ); }
868
869 /* ?pow@?$_Ctraits@O@std@@SAOOO@Z -> public: static long double __cdecl std::_Ctraits<long double>::pow(long double,long double) */
870 LDOUBLE __cdecl std_Ctraits_long_double_pow( LDOUBLE x, LDOUBLE y ) { return pow( x, y ); }
871
872 /* ?sin@?$_Ctraits@M@std@@SAMM@Z -> public: static float __cdecl std::_Ctraits<float>::sin(float) */
873 float __cdecl std_Ctraits_float_sin( float x ) { return sinf( x ); }
874
875 /* ?sin@?$_Ctraits@N@std@@SANN@Z -> public: static double __cdecl std::_Ctraits<double>::sin(double) */
876 double __cdecl std_Ctraits_double_sin( double x ) { return sin( x ); }
877
878 /* ?sin@?$_Ctraits@O@std@@SAOO@Z -> public: static long double __cdecl std::_Ctraits<long double>::sin(long double) */
879 LDOUBLE __cdecl std_Ctraits_long_double_sin( LDOUBLE x ) { return sin( x ); }
880
881 /* ?sqrt@?$_Ctraits@M@std@@SAMM@Z -> public: static float __cdecl std::_Ctraits<float>::sqrt(float) */
882 float __cdecl std_Ctraits_float_sqrt( float x ) { return sqrtf( x ); }
883
884 /* ?sqrt@?$_Ctraits@N@std@@SANN@Z -> public: static double __cdecl std::_Ctraits<double>::sqrt(double) */
885 double __cdecl std_Ctraits_double_sqrt( double x ) { return sqrt( x ); }
886
887 /* ?sqrt@?$_Ctraits@O@std@@SAOO@Z -> public: static long double __cdecl std::_Ctraits<long double>::sqrt(long double) */
888 LDOUBLE __cdecl std_Ctraits_long_double_sqrt( LDOUBLE x ) { return sqrt( x ); }
889
890 /* ?tan@?$_Ctraits@M@std@@SAMM@Z -> public: static float __cdecl std::_Ctraits<float>::tan(float) */
891 float __cdecl std_Ctraits_float_tan( float x ) { return tanf( x ); }
892
893 /* ?tan@?$_Ctraits@N@std@@SANN@Z -> public: static double __cdecl std::_Ctraits<double>::tan(double) */
894 double __cdecl std_Ctraits_double_tan( double x ) { return tan( x ); }
895
896 /* ?tan@?$_Ctraits@O@std@@SAOO@Z -> public: static long double __cdecl std::_Ctraits<long double>::tan(long double) */
897 LDOUBLE __cdecl std_Ctraits_long_double_tan( LDOUBLE x ) { return tan( x ); }
898
899 /* ??0?$_Complex_base@MU_C_float_complex@@@std@@QAE@ABM0@Z */
900 /* ??0?$_Complex_base@MU_C_float_complex@@@std@@QEAA@AEBM0@Z */
901 /* ??0?$complex@M@std@@QAE@ABM0@Z */
902 /* ??0?$complex@M@std@@QEAA@AEBM0@Z */
903 DEFINE_THISCALL_WRAPPER(complex_float_ctor, 12)
904 complex_float* __thiscall complex_float_ctor(complex_float *this, const float *real, const float *imag)
905 {
906     this->real = *real;
907     this->imag = *imag;
908     return this;
909 }
910
911 /* ??0?$complex@M@std@@QAE@ABU_C_float_complex@@@Z */
912 /* ??0?$complex@M@std@@QEAA@AEBU_C_float_complex@@@Z */
913 DEFINE_THISCALL_WRAPPER(complex_float_ctor_float, 8)
914 complex_float* __thiscall complex_float_ctor_float(complex_float *this, const complex_float *c)
915 {
916     this->real = c->real;
917     this->imag = c->imag;
918     return this;
919 }
920
921 /* ??0?$complex@M@std@@QAE@ABU_C_double_complex@@@Z */
922 /* ??0?$complex@M@std@@QEAA@AEBU_C_double_complex@@@Z */
923 /* ??0?$complex@M@std@@QAE@ABU_C_ldouble_complex@@@Z */
924 /* ??0?$complex@M@std@@QEAA@AEBU_C_ldouble_complex@@@Z */
925 /* ??0?$complex@M@std@@QAE@ABV?$complex@N@1@@Z */
926 /* ??0?$complex@M@std@@QEAA@AEBV?$complex@N@1@@Z */
927 /* ??0?$complex@M@std@@QAE@ABV?$complex@O@1@@Z */
928 /* ??0?$complex@M@std@@QEAA@AEBV?$complex@O@1@@Z */
929 DEFINE_THISCALL_WRAPPER(complex_float_ctor_double, 8)
930 complex_float* __thiscall complex_float_ctor_double(complex_float *this, const complex_double *c)
931 {
932     this->real = c->real;
933     this->imag = c->imag;
934     return this;
935 }
936
937 /* ??_F?$complex@M@std@@QAEXXZ */
938 /* ??_F?$complex@M@std@@QEAAXXZ */
939 DEFINE_THISCALL_WRAPPER(complex_float_ctor_def, 4)
940 complex_float* __thiscall complex_float_ctor_def(complex_float *this)
941 {
942     this->real = this->imag = 0;
943     return this;
944 }
945
946 /* ??$?8M@std@@YA_NABMABV?$complex@M@0@@Z */
947 /* ??$?8M@std@@YA_NAEBMAEBV?$complex@M@0@@Z */
948 MSVCP_bool __cdecl complex_float_equal_fc(const float *l, const complex_float *r)
949 {
950     return *l==r->real && r->imag==0;
951 }
952
953 /* ??$?8M@std@@YA_NABV?$complex@M@0@0@Z */
954 /* ??$?8M@std@@YA_NAEBV?$complex@M@0@0@Z */
955 MSVCP_bool __cdecl complex_float_equal(const complex_float *l, const complex_float *r)
956 {
957     return l->real==r->real && l->imag==r->imag;
958 }
959
960 /* ??$?8M@std@@YA_NABV?$complex@M@0@ABM@Z */
961 /* ??$?8M@std@@YA_NAEBV?$complex@M@0@AEBM@Z */
962 MSVCP_bool __cdecl complex_float_equal_cf(const complex_float *l, const float *r)
963 {
964     return l->real==*r && l->imag==0;
965 }
966
967 /* ??$?9M@std@@YA_NABMABV?$complex@M@0@@Z */
968 /* ??$?9M@std@@YA_NAEBMAEBV?$complex@M@0@@Z */
969 MSVCP_bool __cdecl complex_float_not_equal_fc(const float *l, const complex_float *r)
970 {
971     return !complex_float_equal_fc(l, r);
972 }
973
974 /* ??$?9M@std@@YA_NABV?$complex@M@0@0@Z */
975 /* ??$?9M@std@@YA_NAEBV?$complex@M@0@0@Z */
976 MSVCP_bool __cdecl complex_float_not_equal(const complex_float *l, const complex_float *r)
977 {
978     return !complex_float_equal(l, r);
979 }
980
981 /* ??$?9M@std@@YA_NABV?$complex@M@0@ABM@Z */
982 /* ??$?9M@std@@YA_NAEBV?$complex@M@0@AEBM@Z */
983 MSVCP_bool __cdecl complex_float_not_equal_cf(const complex_float *l, const float *r)
984 {
985     return !complex_float_equal_cf(l, r);
986 }
987
988 /* ??$?DM@std@@YA?AV?$complex@M@0@ABMABV10@@Z */
989 /* ??$?DM@std@@YA?AV?$complex@M@0@AEBMAEBV10@@Z */
990 complex_float* __cdecl complex_float_mult_fc(complex_float *ret, const float *l, const complex_float *r)
991 {
992     ret->real = *l * r->real;
993     ret->imag = *l * r->imag;
994     return ret;
995 }
996
997 /* ??$?DM@std@@YA?AV?$complex@M@0@ABV10@0@Z */
998 /* ??$?DM@std@@YA?AV?$complex@M@0@AEBV10@0@Z */
999 complex_float* __cdecl complex_float_mult(complex_float *ret, const complex_float *l, const complex_float *r)
1000 {
1001     ret->real = l->real*r->real - l->imag*r->imag;
1002     ret->imag = l->imag*r->real + l->real*r->imag;
1003     return ret;
1004 }
1005
1006 /* ??$?DM@std@@YA?AV?$complex@M@0@ABV10@ABM@Z */
1007 /* ??$?DM@std@@YA?AV?$complex@M@0@AEBV10@AEBM@Z */
1008 complex_float* __cdecl complex_float_mult_cf(complex_float *ret, const complex_float *l, const float *r)
1009 {
1010     ret->real = l->real * *r;
1011     ret->imag = l->imag * *r;
1012     return ret;
1013 }
1014
1015 /* ??$?GM@std@@YA?AV?$complex@M@0@ABMABV10@@Z */
1016 /* ??$?GM@std@@YA?AV?$complex@M@0@AEBMAEBV10@@Z */
1017 complex_float* __cdecl complex_float_sub_fc(complex_float *ret, const float *l, const complex_float *r)
1018 {
1019     ret->real = *l - r->real;
1020     ret->imag = -r->imag;
1021     return ret;
1022 }
1023
1024 /* ??$?GM@std@@YA?AV?$complex@M@0@ABV10@0@Z */
1025 /* ??$?GM@std@@YA?AV?$complex@M@0@AEBV10@0@Z */
1026 complex_float* __cdecl complex_float_sub(complex_float *ret, const complex_float *l, const complex_float *r)
1027 {
1028     ret->real = l->real - r->real;
1029     ret->imag = l->imag - r->imag;
1030     return ret;
1031 }
1032
1033 /* ??$?GM@std@@YA?AV?$complex@M@0@ABV10@@Z */
1034 /* ??$?GM@std@@YA?AV?$complex@M@0@AEBV10@@Z */
1035 complex_float* __cdecl complex_float_neg(complex_float *ret, const complex_float *c)
1036 {
1037     ret->real = -c->real;
1038     ret->imag = -c->imag;
1039     return ret;
1040 }
1041
1042 /* ??$?GM@std@@YA?AV?$complex@M@0@ABV10@ABM@Z */
1043 /* ??$?GM@std@@YA?AV?$complex@M@0@AEBV10@AEBM@Z */
1044 complex_float* __cdecl complex_float_sub_cf(complex_float *ret, const complex_float *l, const float *r)
1045 {
1046     ret->real = l->real - *r;
1047     ret->imag = l->imag;
1048     return ret;
1049 }
1050
1051 /* ??$?HM@std@@YA?AV?$complex@M@0@ABMABV10@@Z */
1052 /* ??$?HM@std@@YA?AV?$complex@M@0@AEBMAEBV10@@Z */
1053 complex_float* __cdecl complex_float_add_fc(complex_float *ret, const float *l, const complex_float *r)
1054 {
1055     ret->real = *l + r->real;
1056     ret->imag = r->imag;
1057     return ret;
1058 }
1059
1060 /* ??$?HM@std@@YA?AV?$complex@M@0@ABV10@0@Z */
1061 /* ??$?HM@std@@YA?AV?$complex@M@0@AEBV10@0@Z */
1062 complex_float* __cdecl complex_float_add(complex_float *ret, const complex_float *l, const complex_float *r)
1063 {
1064     ret->real = l->real + r->real;
1065     ret->imag = l->imag + r->imag;
1066     return ret;
1067 }
1068
1069 /* ??$?HM@std@@YA?AV?$complex@M@0@ABV10@@Z */
1070 /* ??$?HM@std@@YA?AV?$complex@M@0@AEBV10@@Z */
1071 complex_float* __cdecl complex_float_plus(complex_float *ret, const complex_float *c)
1072 {
1073     *ret = *c;
1074     return ret;
1075 }
1076
1077 /* ??$?HM@std@@YA?AV?$complex@M@0@ABV10@ABM@Z */
1078 /* ??$?HM@std@@YA?AV?$complex@M@0@AEBV10@AEBM@Z */
1079 complex_float* __cdecl complex_float_add_cf(complex_float *ret, const complex_float *l, const float *r)
1080 {
1081     ret->real = l->real + *r;
1082     ret->imag = l->imag;
1083     return ret;
1084 }
1085
1086 /* ??$?KM@std@@YA?AV?$complex@M@0@ABV10@0@Z */
1087 /* ??$?KM@std@@YA?AV?$complex@M@0@AEBV10@0@Z */
1088 complex_float* __cdecl complex_float_div(complex_float *ret, const complex_float *l, const complex_float *r)
1089 {
1090     if((!r->real && !r->imag) || _isnan(l->real) || _isnan(l->imag)
1091             || _isnan(r->real) || _isnan(r->imag)) {
1092         ret->real = std_numeric_limits_float_quiet_NaN();
1093         ret->imag = ret->real;
1094         return ret;
1095     }
1096
1097     ret->real = 0;
1098     ret->imag = 0;
1099     if(r->real) {
1100         ret->real = l->real / r->real;
1101         ret->imag = l->imag / r->real;
1102     }
1103     if(r->imag) {
1104         ret->real += l->imag / r->imag;
1105         ret->imag -= l->real / r->imag;
1106     }
1107     return ret;
1108 }
1109
1110 /* ??$?KM@std@@YA?AV?$complex@M@0@ABMABV10@@Z */
1111 /* ??$?KM@std@@YA?AV?$complex@M@0@AEBMAEBV10@@Z */
1112 complex_float* __cdecl complex_float_div_fc(complex_float *ret, const float *l, const complex_float *r)
1113 {
1114     complex_float c = {*l, 0};
1115     return complex_float_div(ret, &c, r);
1116 }
1117
1118 /* ??$?KM@std@@YA?AV?$complex@M@0@ABV10@ABM@Z */
1119 /* ??$?KM@std@@YA?AV?$complex@M@0@AEBV10@AEBM@Z */
1120 complex_float* __cdecl complex_float_div_cf(complex_float *ret, const complex_float *l, const float *r)
1121 {
1122     ret->real = l->real / *r;
1123     ret->imag = l->imag / *r;
1124     return ret;
1125 }
1126
1127 /* ??4?$_Complex_base@MU_C_float_complex@@@std@@QAEAAV01@ABV01@@Z */
1128 /* ??4?$_Complex_base@MU_C_float_complex@@@std@@QEAAAEAV01@AEBV01@@Z */
1129 /* ??4?$complex@M@std@@QAEAAV01@ABV01@@Z */
1130 /* ??4?$complex@M@std@@QEAAAEAV01@AEBV01@@Z */
1131 DEFINE_THISCALL_WRAPPER(complex_float_assign, 8)
1132 complex_float* __thiscall complex_float_assign(complex_float *this, const complex_float *r)
1133 {
1134     *this = *r;
1135     return this;
1136 }
1137
1138 /* ??4?$complex@M@std@@QAEAAV01@ABM@Z */
1139 /* ??4?$complex@M@std@@QEAAAEAV01@AEBM@Z */
1140 DEFINE_THISCALL_WRAPPER(complex_float_assign_float, 8)
1141 complex_float* __thiscall complex_float_assign_float(complex_float *this, const float *r)
1142 {
1143     this->real = *r;
1144     this->imag = 0;
1145     return this;
1146 }
1147
1148 /* ??X?$complex@M@std@@QAEAAV01@ABM@Z */
1149 /* ??X?$complex@M@std@@QEAAAEAV01@AEBM@Z */
1150 DEFINE_THISCALL_WRAPPER(complex_float_mult_assign_float, 8)
1151 complex_float* __thiscall complex_float_mult_assign_float(complex_float *this, const float *r)
1152 {
1153     this->real *= *r;
1154     this->imag *= *r;
1155     return this;
1156 }
1157
1158 /* ??X?$complex@M@std@@QAEAAV01@ABV01@@Z */
1159 /* ??X?$complex@M@std@@QEAAAEAV01@AEBV01@@Z */
1160 DEFINE_THISCALL_WRAPPER(complex_float_mult_assign, 8)
1161 complex_float* __thiscall complex_float_mult_assign(complex_float *this, const complex_float *r)
1162 {
1163     complex_float tmp = *this;
1164
1165     this->real = tmp.real*r->real - tmp.imag*r->imag;
1166     this->imag = tmp.real*r->imag + tmp.imag*r->real;
1167     return this;
1168 }
1169
1170 /* ??Y?$complex@M@std@@QAEAAV01@ABM@Z */
1171 /* ??Y?$complex@M@std@@QEAAAEAV01@AEBM@Z */
1172 DEFINE_THISCALL_WRAPPER(complex_float_add_assign_float, 8)
1173 complex_float* __thiscall complex_float_add_assign_float(complex_float *this, const float *r)
1174 {
1175     this->real += *r;
1176     return this;
1177 }
1178
1179 /* ??Y?$complex@M@std@@QAEAAV01@ABV01@@Z */
1180 /* ??Y?$complex@M@std@@QEAAAEAV01@AEBV01@@Z */
1181 DEFINE_THISCALL_WRAPPER(complex_float_add_assign, 8)
1182 complex_float* __thiscall complex_float_add_assign(complex_float *this, const complex_float *r)
1183 {
1184     this->real += r->real;
1185     this->imag += r->imag;
1186     return this;
1187 }
1188
1189 /* ??Z?$complex@M@std@@QAEAAV01@ABM@Z */
1190 /* ??Z?$complex@M@std@@QEAAAEAV01@AEBM@Z */
1191 DEFINE_THISCALL_WRAPPER(complex_float_sub_assign_float, 8)
1192 complex_float* __thiscall complex_float_sub_assign_float(complex_float *this, const float *r)
1193 {
1194     this->real -= *r;
1195     return this;
1196 }
1197
1198 /* ??Z?$complex@M@std@@QAEAAV01@ABV01@@Z */
1199 /* ??Z?$complex@M@std@@QEAAAEAV01@AEBV01@@Z */
1200 DEFINE_THISCALL_WRAPPER(complex_float_sub_assign, 8)
1201 complex_float* __thiscall complex_float_sub_assign(complex_float *this, const complex_float *r)
1202 {
1203     this->real -= r->real;
1204     this->imag -= r->imag;
1205     return this;
1206 }
1207
1208 /* ??_0?$complex@M@std@@QAEAAV01@ABM@Z */
1209 /* ??_0?$complex@M@std@@QEAAAEAV01@AEBM@Z */
1210 DEFINE_THISCALL_WRAPPER(complex_float_div_assign_float, 8)
1211 complex_float* __thiscall complex_float_div_assign_float(complex_float *this, const float *r)
1212 {
1213     this->real /= *r;
1214     this->imag /= *r;
1215     return this;
1216 }
1217
1218 /* ??_0?$complex@M@std@@QAEAAV01@ABV01@@Z */
1219 /* ??_0?$complex@M@std@@QEAAAEAV01@AEBV01@@Z */
1220 DEFINE_THISCALL_WRAPPER(complex_float_div_assign, 8)
1221 complex_float* __thiscall complex_float_div_assign(complex_float *this, const complex_float *r)
1222 {
1223     complex_float tmp = *this;
1224     return complex_float_div(this, &tmp, r);
1225 }
1226
1227 /* ??$arg@M@std@@YAMABV?$complex@M@0@@Z */
1228 /* ??$arg@M@std@@YAMAEBV?$complex@M@0@@Z */
1229 float __cdecl complex_float_arg(const complex_float *c)
1230 {
1231     return atan2(c->imag, c->real);
1232 }
1233
1234 /* ??$imag@M@std@@YAMABV?$complex@M@0@@Z */
1235 /* ??$imag@M@std@@YAMAEBV?$complex@M@0@@Z */
1236 float __cdecl complex_float_imag(const complex_float *c)
1237 {
1238     return c->imag;
1239 }
1240
1241 /* ?imag@?$_Complex_base@MU_C_float_complex@@@std@@QAEMABM@Z */
1242 /* ?imag@?$_Complex_base@MU_C_float_complex@@@std@@QEAAMAEBM@Z */
1243 DEFINE_THISCALL_WRAPPER(complex_float_imag_set, 8)
1244 float __thiscall complex_float_imag_set(complex_float *this, const float *f)
1245 {
1246     return (this->imag = *f);
1247 }
1248
1249 /* ?imag@?$_Complex_base@MU_C_float_complex@@@std@@QBEMXZ */
1250 /* ?imag@?$_Complex_base@MU_C_float_complex@@@std@@QEBAMXZ */
1251 DEFINE_THISCALL_WRAPPER(complex_float_imag_get, 4)
1252 float __thiscall complex_float_imag_get(const complex_float *this)
1253 {
1254     return this->imag;
1255 }
1256
1257 /* ??$real@M@std@@YAMABV?$complex@M@0@@Z */
1258 /* ??$real@M@std@@YAMAEBV?$complex@M@0@@Z */
1259 float __cdecl complex_float_real(const complex_float *c)
1260 {
1261     return c->real;
1262 }
1263
1264 /* ?real@?$_Complex_base@MU_C_float_complex@@@std@@QAEMABM@Z */
1265 /* ?real@?$_Complex_base@MU_C_float_complex@@@std@@QEAAMAEBM@Z */
1266 DEFINE_THISCALL_WRAPPER(complex_float_real_set, 8)
1267 float __thiscall complex_float_real_set(complex_float *this, const float *f)
1268 {
1269     return (this->real = *f);
1270 }
1271
1272 /* ?real@?$_Complex_base@MU_C_float_complex@@@std@@QBEMXZ */
1273 /* ?real@?$_Complex_base@MU_C_float_complex@@@std@@QEBAMXZ */
1274 DEFINE_THISCALL_WRAPPER(complex_float_real_get, 4)
1275 float __thiscall complex_float_real_get(const complex_float *this)
1276 {
1277     return this->real;
1278 }
1279
1280 /* ??$_Fabs@M@std@@YAMABV?$complex@M@0@PAH@Z */
1281 /* ??$_Fabs@M@std@@YAMAEBV?$complex@M@0@PEAH@Z */
1282 float __cdecl complex_float__Fabs(const complex_float *c, int *scale)
1283 {
1284     float ret;
1285
1286     ret = hypotf(c->real, c->imag);
1287     if(_isnan(ret) || ret==0) {
1288         *scale = 0;
1289     }else if(ret >= 1) {
1290         *scale = 2;
1291         ret /= 4;
1292     }else {
1293         *scale = -2;
1294         ret *= 4;
1295     }
1296
1297     return ret;
1298 }
1299
1300 /* ??$abs@M@std@@YAMABV?$complex@M@0@@Z */
1301 /* ??$abs@M@std@@YAMAEBV?$complex@M@0@@Z */
1302 float __cdecl complex_float_abs(const complex_float *c)
1303 {
1304     return hypotf(c->real, c->imag);
1305 }
1306
1307 /* ??$conj@M@std@@YA?AV?$complex@M@0@ABV10@@Z */
1308 /* ??$conj@M@std@@YA?AV?$complex@M@0@AEBV10@@Z */
1309 complex_float* __cdecl complex_float_conj(complex_float *ret, const complex_float *c)
1310 {
1311     ret->real = c->real;
1312     ret->imag = -c->imag;
1313     return ret;
1314 }
1315
1316 /* ??$cos@M@std@@YA?AV?$complex@M@0@ABV10@@Z */
1317 /* ??$cos@M@std@@YA?AV?$complex@M@0@AEBV10@@Z */
1318 complex_float* __cdecl complex_float_cos(complex_float *ret, const complex_float *c)
1319 {
1320     ret->real = cos(c->real)*cosh(c->imag);
1321     ret->imag = -sin(c->real)*sinh(c->imag);
1322     return ret;
1323 }
1324
1325 /* ??$sin@M@std@@YA?AV?$complex@M@0@ABV10@@Z */
1326 /* ??$sin@M@std@@YA?AV?$complex@M@0@AEBV10@@Z */
1327 complex_float* __cdecl complex_float_sin(complex_float *ret, const complex_float *c)
1328 {
1329     ret->real = sin(c->real)*cosh(c->imag);
1330     ret->imag = cos(c->real)*sinh(c->imag);
1331     return ret;
1332 }
1333
1334 /* ??$tan@M@std@@YA?AV?$complex@M@0@ABV10@@Z */
1335 /* ??$tan@M@std@@YA?AV?$complex@M@0@AEBV10@@Z */
1336 complex_float* __cdecl complex_float_tan(complex_float *ret, const complex_float *c)
1337 {
1338     double denom = cos(2*c->real) + cosh(2*c->imag);
1339     ret->real = sin(2*c->real) / denom;
1340     ret->imag = sinh(2*c->imag) / denom;
1341     return ret;
1342 }
1343
1344 /* ??$cosh@M@std@@YA?AV?$complex@M@0@ABV10@@Z */
1345 /* ??$cosh@M@std@@YA?AV?$complex@M@0@AEBV10@@Z */
1346 complex_float* __cdecl complex_float_cosh(complex_float *ret, const complex_float *c)
1347 {
1348     ret->real = cosh(c->real)*cos(c->imag);
1349     ret->imag = sinh(c->real)*sin(c->imag);
1350     return ret;
1351 }
1352
1353 /* ??$sinh@M@std@@YA?AV?$complex@M@0@ABV10@@Z */
1354 /* ??$sinh@M@std@@YA?AV?$complex@M@0@AEBV10@@Z */
1355 complex_float* __cdecl complex_float_sinh(complex_float *ret, const complex_float *c)
1356 {
1357     ret->real = sinh(c->real)*cos(c->imag);
1358     ret->imag = cosh(c->real)*sin(c->imag);
1359     return ret;
1360 }
1361
1362 /* ??$tanh@M@std@@YA?AV?$complex@M@0@ABV10@@Z */
1363 /* ??$tanh@M@std@@YA?AV?$complex@M@0@AEBV10@@Z */
1364 complex_float* __cdecl complex_float_tanh(complex_float *ret, const complex_float *c)
1365 {
1366     complex_float tmp;
1367
1368     ret->real = -c->imag;
1369     ret->imag = c->real;
1370     complex_float_tan(&tmp, ret);
1371     ret->real = tmp.imag;
1372     ret->imag = -tmp.real;
1373     return ret;
1374 }
1375
1376 /* ??$exp@M@std@@YA?AV?$complex@M@0@ABV10@@Z */
1377 /* ??$exp@M@std@@YA?AV?$complex@M@0@AEBV10@@Z */
1378 complex_float* __cdecl complex_float_exp(complex_float *ret, const complex_float *c)
1379 {
1380     ret->real = ret->imag = exp(c->real);
1381     ret->real *= cos(c->imag);
1382     ret->imag *= sin(c->imag);
1383     return ret;
1384 }
1385
1386 /* ??$log@M@std@@YA?AV?$complex@M@0@ABV10@@Z */
1387 /* ??$log@M@std@@YA?AV?$complex@M@0@AEBV10@@Z */
1388 complex_float* __cdecl complex_float_log(complex_float *ret, const complex_float *c)
1389 {
1390     ret->real = log(complex_float_abs(c));
1391     ret->imag = complex_float_arg(c);
1392     return ret;
1393 }
1394
1395 /* ??$log10@M@std@@YA?AV?$complex@M@0@ABV10@@Z */
1396 /* ??$log10@M@std@@YA?AV?$complex@M@0@AEBV10@@Z */
1397 complex_float* __cdecl complex_float_log10(complex_float *ret, const complex_float *c)
1398 {
1399     complex_float_log(ret, c);
1400     ret->real *= M_LOG10E;
1401     ret->imag *= M_LOG10E;
1402     return ret;
1403 }
1404
1405 /* ??$norm@M@std@@YAMABV?$complex@M@0@@Z */
1406 /* ??$norm@M@std@@YAMAEBV?$complex@M@0@@Z */
1407 float __cdecl complex_float_norm(const complex_float *c)
1408 {
1409     return c->real*c->real + c->imag*c->imag;
1410 }
1411
1412 /* ??$polar@M@std@@YA?AV?$complex@M@0@ABM0@Z */
1413 /* ??$polar@M@std@@YA?AV?$complex@M@0@AEBM0@Z */
1414 complex_float* __cdecl complex_float_polar_theta(complex_float *ret, const float *mod, const float *theta)
1415 {
1416     ret->real = *mod * cos(*theta);
1417     ret->imag = *mod * sin(*theta);
1418     return ret;
1419 }
1420
1421 /* ??$polar@M@std@@YA?AV?$complex@M@0@ABM@Z */
1422 /* ??$polar@M@std@@YA?AV?$complex@M@0@AEBM@Z */
1423 complex_float* __cdecl complex_float_polar(complex_float *ret, const float *mod)
1424 {
1425     ret->real = *mod;
1426     ret->imag = 0;
1427     return ret;
1428 }
1429
1430 /* ??$pow@M@std@@YA?AV?$complex@M@0@ABV10@0@Z */
1431 /* ??$pow@M@std@@YA?AV?$complex@M@0@AEBV10@0@Z */
1432 complex_float* __cdecl complex_float_pow(complex_float *ret, const complex_float *l, const complex_float *r)
1433 {
1434     float abs = complex_float_abs(l), arg = complex_float_arg(l);
1435     float rad = pow(abs, r->real), theta = r->real*arg;
1436
1437     if(r->imag) {
1438         rad *= exp(-r->imag * arg);
1439         theta += r->imag * log(abs);
1440     }
1441
1442     ret->real = rad * cos(theta);
1443     ret->imag = rad * sin(theta);
1444     return ret;
1445 }
1446
1447 /* ??$pow@M@std@@YA?AV?$complex@M@0@ABMABV10@@Z */
1448 /* ??$pow@M@std@@YA?AV?$complex@M@0@AEBMAEBV10@@Z */
1449 complex_float* __cdecl complex_float_pow_fc(complex_float *ret, const float *l, const complex_float *r)
1450 {
1451     complex_float c = { *l, 0 };
1452     return complex_float_pow(ret, &c, r);
1453 }
1454
1455 /* ??$pow@M@std@@YA?AV?$complex@M@0@ABV10@ABM@Z */
1456 /* ??$pow@M@std@@YA?AV?$complex@M@0@AEBV10@AEBM@Z */
1457 complex_float* __cdecl complex_float_pow_cf(complex_float *ret, const complex_float *l, const float *r)
1458 {
1459     complex_float c = { *r, 0 };
1460     return complex_float_pow(ret, l, &c);
1461 }
1462
1463 /* ??$sqrt@M@std@@YA?AV?$complex@M@0@ABV10@@Z */
1464 /* ??$sqrt@M@std@@YA?AV?$complex@M@0@AEBV10@@Z */
1465 complex_float* __cdecl complex_float_sqrt(complex_float *ret, const complex_float *l)
1466 {
1467     complex_float c = { 0.5, 0 };
1468     return complex_float_pow(ret, l, &c);
1469 }
1470
1471 /* ??0?$_Complex_base@NU_C_double_complex@@@std@@QAE@ABN0@Z */
1472 /* ??0?$_Complex_base@NU_C_double_complex@@@std@@QEAA@AEBN0@Z */
1473 /* ??0?$_Complex_base@OU_C_ldouble_complex@@@std@@QAE@ABO0@Z */
1474 /* ??0?$_Complex_base@OU_C_ldouble_complex@@@std@@QEAA@AEBO0@Z */
1475 /* ??0?$complex@N@std@@QAE@ABN0@Z */
1476 /* ??0?$complex@N@std@@QEAA@AEBN0@Z */
1477 /* ??0?$complex@O@std@@QAE@ABO0@Z */
1478 /* ??0?$complex@O@std@@QEAA@AEBO0@Z */
1479 DEFINE_THISCALL_WRAPPER(complex_double_ctor, 12)
1480 complex_double* __thiscall complex_double_ctor(complex_double *this, const double *real, const double *imag)
1481 {
1482     this->real = *real;
1483     this->imag = *imag;
1484     return this;
1485 }
1486
1487 /* ??0?$complex@N@std@@QAE@ABU_C_double_complex@@@Z */
1488 /* ??0?$complex@N@std@@QEAA@AEBU_C_double_complex@@@Z */
1489 /* ??0?$complex@N@std@@QAE@ABU_C_ldouble_complex@@@Z */
1490 /* ??0?$complex@N@std@@QEAA@AEBU_C_ldouble_complex@@@Z */
1491 /* ??0?$complex@N@std@@QAE@ABV?$complex@O@1@@Z */
1492 /* ??0?$complex@N@std@@QEAA@AEBV?$complex@O@1@@Z */
1493 /* ??0?$complex@O@std@@QAE@ABU_C_ldouble_complex@@@Z */
1494 /* ??0?$complex@O@std@@QEAA@AEBU_C_ldouble_complex@@@Z */
1495 /* ??0?$complex@O@std@@QAE@ABV?$complex@N@1@@Z */
1496 /* ??0?$complex@O@std@@QEAA@AEBV?$complex@N@1@@Z */
1497 DEFINE_THISCALL_WRAPPER(complex_double_ctor_double, 8)
1498 complex_double* __thiscall complex_double_ctor_double(complex_double *this, const complex_double *c)
1499 {
1500     this->real = c->real;
1501     this->imag = c->imag;
1502     return this;
1503 }
1504
1505 /* ??0?$complex@N@std@@QAE@ABV?$complex@M@1@@Z */
1506 /* ??0?$complex@N@std@@QEAA@AEBV?$complex@M@1@@Z */
1507 /* ??0?$complex@O@std@@QAE@ABV?$complex@M@1@@Z */
1508 /* ??0?$complex@O@std@@QEAA@AEBV?$complex@M@1@@Z */
1509 DEFINE_THISCALL_WRAPPER(complex_double_ctor_float, 8)
1510 complex_double* __thiscall complex_double_ctor_float(complex_double *this, const complex_float *c)
1511 {
1512     this->real = c->real;
1513     this->imag = c->imag;
1514     return this;
1515 }
1516
1517 /* ??_F?$complex@N@std@@QAEXXZ */
1518 /* ??_F?$complex@N@std@@QEAAXXZ */
1519 /* ??_F?$complex@O@std@@QAEXXZ */
1520 /* ??_F?$complex@O@std@@QEAAXXZ */
1521 DEFINE_THISCALL_WRAPPER(complex_double_ctor_def, 4)
1522 complex_double* __thiscall complex_double_ctor_def(complex_double *this)
1523 {
1524     this->real = this->imag = 0;
1525     return this;
1526 }
1527
1528 /* ??$?8N@std@@YA_NABNABV?$complex@N@0@@Z */
1529 /* ??$?8N@std@@YA_NAEBNAEBV?$complex@N@0@@Z */
1530 /* ??$?8O@std@@YA_NABOABV?$complex@O@0@@Z */
1531 /* ??$?8O@std@@YA_NAEBOAEBV?$complex@O@0@@Z */
1532 MSVCP_bool __cdecl complex_double_equal_dc(const double *l, const complex_double *r)
1533 {
1534     return *l==r->real && r->imag==0;
1535 }
1536
1537 /* ??$?8N@std@@YA_NABV?$complex@N@0@0@Z */
1538 /* ??$?8N@std@@YA_NAEBV?$complex@N@0@0@Z */
1539 /* ??$?8O@std@@YA_NABV?$complex@O@0@0@Z */
1540 /* ??$?8O@std@@YA_NAEBV?$complex@O@0@0@Z */
1541 MSVCP_bool __cdecl complex_double_equal(const complex_double *l, const complex_double *r)
1542 {
1543     return l->real==r->real && l->imag==r->imag;
1544 }
1545
1546 /* ??$?8N@std@@YA_NABV?$complex@N@0@ABN@Z */
1547 /* ??$?8N@std@@YA_NAEBV?$complex@N@0@AEBN@Z */
1548 /* ??$?8O@std@@YA_NABV?$complex@O@0@ABO@Z */
1549 /* ??$?8O@std@@YA_NAEBV?$complex@O@0@AEBO@Z */
1550 MSVCP_bool __cdecl complex_double_equal_cd(const complex_double *l, double *r)
1551 {
1552     return l->real==*r && l->imag==0;
1553 }
1554
1555 /* ??$?9N@std@@YA_NABNABV?$complex@N@0@@Z */
1556 /* ??$?9N@std@@YA_NAEBNAEBV?$complex@N@0@@Z */
1557 /* ??$?9O@std@@YA_NABOABV?$complex@O@0@@Z */
1558 /* ??$?9O@std@@YA_NAEBOAEBV?$complex@O@0@@Z */
1559 MSVCP_bool __cdecl complex_double_not_equal_dc(const double *l, const complex_double *r)
1560 {
1561     return !complex_double_equal_dc(l, r);
1562 }
1563
1564 /* ??$?9N@std@@YA_NABV?$complex@N@0@0@Z */
1565 /* ??$?9N@std@@YA_NAEBV?$complex@N@0@0@Z */
1566 /* ??$?9O@std@@YA_NABV?$complex@O@0@0@Z */
1567 /* ??$?9O@std@@YA_NAEBV?$complex@O@0@0@Z */
1568 MSVCP_bool __cdecl complex_double_not_equal(const complex_double *l, const complex_double *r)
1569 {
1570     return !complex_double_equal(l, r);
1571 }
1572
1573 /* ??$?9N@std@@YA_NABV?$complex@N@0@ABN@Z */
1574 /* ??$?9N@std@@YA_NAEBV?$complex@N@0@AEBN@Z */
1575 /* ??$?9O@std@@YA_NABV?$complex@O@0@ABO@Z */
1576 /* ??$?9O@std@@YA_NAEBV?$complex@O@0@AEBO@Z */
1577 MSVCP_bool __cdecl complex_double_not_equal_cd(const complex_double *l, double *r)
1578 {
1579     return !complex_double_equal_cd(l, r);
1580 }
1581
1582 /* ??$?DN@std@@YA?AV?$complex@N@0@ABNABV10@@Z */
1583 /* ??$?DN@std@@YA?AV?$complex@N@0@AEBNAEBV10@@Z */
1584 /* ??$?DO@std@@YA?AV?$complex@O@0@ABOABV10@@Z */
1585 /* ??$?DO@std@@YA?AV?$complex@O@0@AEBOAEBV10@@Z */
1586 complex_double* __cdecl complex_double_mult_dc(complex_double *ret, const double *l, const complex_double *r)
1587 {
1588     ret->real = *l * r->real;
1589     ret->imag = *l * r->imag;
1590     return ret;
1591 }
1592
1593 /* ??$?DN@std@@YA?AV?$complex@N@0@ABV10@0@Z */
1594 /* ??$?DN@std@@YA?AV?$complex@N@0@AEBV10@0@Z */
1595 /* ??$?DO@std@@YA?AV?$complex@O@0@ABV10@0@Z */
1596 /* ??$?DO@std@@YA?AV?$complex@O@0@AEBV10@0@Z */
1597 complex_double* __cdecl complex_double_mult(complex_double *ret, const complex_double *l, const complex_double *r)
1598 {
1599     ret->real = l->real*r->real - l->imag*r->imag;
1600     ret->imag = l->imag*r->real + l->real*r->imag;
1601     return ret;
1602 }
1603
1604 /* ??$?DN@std@@YA?AV?$complex@N@0@ABV10@ABN@Z */
1605 /* ??$?DN@std@@YA?AV?$complex@N@0@AEBV10@AEBN@Z */
1606 /* ??$?DO@std@@YA?AV?$complex@O@0@ABV10@ABO@Z */
1607 /* ??$?DO@std@@YA?AV?$complex@O@0@AEBV10@AEBO@Z */
1608 complex_double* __cdecl complex_double_mult_cd(complex_double *ret, const complex_double *l, double *r)
1609 {
1610     ret->real = l->real * *r;
1611     ret->imag = l->imag * *r;
1612     return ret;
1613 }
1614
1615 /* ??$?GN@std@@YA?AV?$complex@N@0@ABNABV10@@Z */
1616 /* ??$?GN@std@@YA?AV?$complex@N@0@AEBNAEBV10@@Z */
1617 /* ??$?GO@std@@YA?AV?$complex@O@0@ABOABV10@@Z */
1618 /* ??$?GO@std@@YA?AV?$complex@O@0@AEBOAEBV10@@Z */
1619 complex_double* __cdecl complex_double_sub_dc(complex_double *ret, const double *l, const complex_double *r)
1620 {
1621     ret->real = *l - r->real;
1622     ret->imag = -r->imag;
1623     return ret;
1624 }
1625
1626 /* ??$?GN@std@@YA?AV?$complex@N@0@ABV10@0@Z */
1627 /* ??$?GN@std@@YA?AV?$complex@N@0@AEBV10@0@Z */
1628 /* ??$?GO@std@@YA?AV?$complex@O@0@ABV10@0@Z */
1629 /* ??$?GO@std@@YA?AV?$complex@O@0@AEBV10@0@Z */
1630 complex_double* __cdecl complex_double_sub(complex_double *ret, const complex_double *l, const complex_double *r)
1631 {
1632     ret->real = l->real - r->real;
1633     ret->imag = l->imag - r->imag;
1634     return ret;
1635 }
1636
1637 /* ??$?GN@std@@YA?AV?$complex@N@0@ABV10@@Z */
1638 /* ??$?GN@std@@YA?AV?$complex@N@0@AEBV10@@Z */
1639 /* ??$?GO@std@@YA?AV?$complex@O@0@ABV10@@Z */
1640 /* ??$?GO@std@@YA?AV?$complex@O@0@AEBV10@@Z */
1641 complex_double* __cdecl complex_double_neg(complex_double *ret, const complex_double *c)
1642 {
1643     ret->real = -c->real;
1644     ret->imag = -c->imag;
1645     return ret;
1646 }
1647
1648 /* ??$?GN@std@@YA?AV?$complex@N@0@ABV10@ABN@Z */
1649 /* ??$?GN@std@@YA?AV?$complex@N@0@AEBV10@AEBN@Z */
1650 /* ??$?GO@std@@YA?AV?$complex@O@0@ABV10@ABO@Z */
1651 /* ??$?GO@std@@YA?AV?$complex@O@0@AEBV10@AEBO@Z */
1652 complex_double* __cdecl complex_double_sub_cd(complex_double *ret, const complex_double *l, double *r)
1653 {
1654     ret->real = l->real - *r;
1655     ret->imag = l->imag;
1656     return ret;
1657 }
1658
1659 /* ??$?HN@std@@YA?AV?$complex@N@0@ABNABV10@@Z */
1660 /* ??$?HN@std@@YA?AV?$complex@N@0@AEBNAEBV10@@Z */
1661 /* ??$?HO@std@@YA?AV?$complex@O@0@ABOABV10@@Z */
1662 /* ??$?HO@std@@YA?AV?$complex@O@0@AEBOAEBV10@@Z */
1663 complex_double* __cdecl complex_double_add_dc(complex_double *ret, const double *l, const complex_double *r)
1664 {
1665     ret->real = *l + r->real;
1666     ret->imag = r->imag;
1667     return ret;
1668 }
1669
1670 /* ??$?HN@std@@YA?AV?$complex@N@0@ABV10@0@Z */
1671 /* ??$?HN@std@@YA?AV?$complex@N@0@AEBV10@0@Z */
1672 /* ??$?HO@std@@YA?AV?$complex@O@0@ABV10@0@Z */
1673 /* ??$?HO@std@@YA?AV?$complex@O@0@AEBV10@0@Z */
1674 complex_double* __cdecl complex_double_add(complex_double *ret, const complex_double *l, const complex_double *r)
1675 {
1676     ret->real = l->real + r->real;
1677     ret->imag = l->imag + r->imag;
1678     return ret;
1679 }
1680
1681 /* ??$?HN@std@@YA?AV?$complex@N@0@ABV10@@Z */
1682 /* ??$?HN@std@@YA?AV?$complex@N@0@AEBV10@@Z */
1683 /* ??$?HO@std@@YA?AV?$complex@O@0@ABV10@@Z */
1684 /* ??$?HO@std@@YA?AV?$complex@O@0@AEBV10@@Z */
1685 complex_double* __cdecl complex_double_plus(complex_double *ret, const complex_double *c)
1686 {
1687     *ret = *c;
1688     return ret;
1689 }
1690
1691 /* ??$?HN@std@@YA?AV?$complex@N@0@ABV10@ABN@Z */
1692 /* ??$?HN@std@@YA?AV?$complex@N@0@AEBV10@AEBN@Z */
1693 /* ??$?HO@std@@YA?AV?$complex@O@0@ABV10@ABO@Z */
1694 /* ??$?HO@std@@YA?AV?$complex@O@0@AEBV10@AEBO@Z */
1695 complex_double* __cdecl complex_double_add_cd(complex_double *ret, const complex_double *l, double *r)
1696 {
1697     ret->real = l->real + *r;
1698     ret->imag = l->imag;
1699     return ret;
1700 }
1701
1702 /* ??$?KN@std@@YA?AV?$complex@N@0@ABV10@0@Z */
1703 /* ??$?KN@std@@YA?AV?$complex@N@0@AEBV10@0@Z */
1704 /* ??$?KO@std@@YA?AV?$complex@O@0@ABV10@0@Z */
1705 /* ??$?KO@std@@YA?AV?$complex@O@0@AEBV10@0@Z */
1706 complex_double* __cdecl complex_double_div(complex_double *ret, const complex_double *l, const complex_double *r)
1707 {
1708     if((!r->real && !r->imag) || _isnan(l->real) || _isnan(l->imag)
1709             || _isnan(r->real) || _isnan(r->imag)) {
1710         ret->real = std_numeric_limits_double_quiet_NaN();
1711         ret->imag = ret->real;
1712         return ret;
1713     }
1714
1715     ret->real = 0;
1716     ret->imag = 0;
1717     if(r->real) {
1718         ret->real = l->real / r->real;
1719         ret->imag = l->imag / r->real;
1720     }
1721     if(r->imag) {
1722         ret->real += l->imag / r->imag;
1723         ret->imag -= l->real / r->imag;
1724     }
1725     return ret;
1726 }
1727
1728 /* ??$?KN@std@@YA?AV?$complex@N@0@ABNABV10@@Z */
1729 /* ??$?KN@std@@YA?AV?$complex@N@0@AEBNAEBV10@@Z */
1730 /* ??$?KO@std@@YA?AV?$complex@O@0@ABOABV10@@Z */
1731 /* ??$?KO@std@@YA?AV?$complex@O@0@AEBOAEBV10@@Z */
1732 complex_double* __cdecl complex_double_div_dc(complex_double *ret, const double *l, const complex_double *r)
1733 {
1734     complex_double c = {*l, 0};
1735     return complex_double_div(ret, &c, r);
1736 }
1737
1738 /* ??$?KN@std@@YA?AV?$complex@N@0@ABV10@ABN@Z */
1739 /* ??$?KN@std@@YA?AV?$complex@N@0@AEBV10@AEBN@Z */
1740 /* ??$?KO@std@@YA?AV?$complex@O@0@ABV10@ABO@Z */
1741 /* ??$?KO@std@@YA?AV?$complex@O@0@AEBV10@AEBO@Z */
1742 complex_double* __cdecl complex_double_div_cd(complex_double *ret, const complex_double *l, double *r)
1743 {
1744     ret->real = l->real / *r;
1745     ret->imag = l->imag / *r;
1746     return ret;
1747 }
1748
1749 /* ??4?$_Complex_base@NU_C_double_complex@@@std@@QAEAAV01@ABV01@@Z */
1750 /* ??4?$_Complex_base@NU_C_double_complex@@@std@@QEAAAEAV01@AEBV01@@Z */
1751 /* ??4?$_Complex_base@OU_C_ldouble_complex@@@std@@QAEAAV01@ABV01@@Z */
1752 /* ??4?$_Complex_base@OU_C_ldouble_complex@@@std@@QEAAAEAV01@AEBV01@@Z */
1753 /* ??4?$complex@N@std@@QAEAAV01@ABV01@@Z */
1754 /* ??4?$complex@N@std@@QEAAAEAV01@AEBV01@@Z */
1755 /* ??4?$complex@O@std@@QAEAAV01@ABV01@@Z */
1756 /* ??4?$complex@O@std@@QEAAAEAV01@AEBV01@@Z */
1757 DEFINE_THISCALL_WRAPPER(complex_double_assign, 8)
1758 complex_double* __thiscall complex_double_assign(complex_double *this, const complex_double *r)
1759 {
1760     *this = *r;
1761     return this;
1762 }
1763
1764 /* ??4?$complex@N@std@@QAEAAV01@ABN@Z */
1765 /* ??4?$complex@N@std@@QEAAAEAV01@AEBN@Z */
1766 /* ??4?$complex@O@std@@QAEAAV01@ABO@Z */
1767 /* ??4?$complex@O@std@@QEAAAEAV01@AEBO@Z */
1768 DEFINE_THISCALL_WRAPPER(complex_double_assign_double, 8)
1769 complex_double* __thiscall complex_double_assign_double(complex_double *this, double *r)
1770 {
1771     this->real = *r;
1772     this->imag = 0;
1773     return this;
1774 }
1775
1776 /* ??X?$complex@N@std@@QAEAAV01@ABN@Z */
1777 /* ??X?$complex@N@std@@QEAAAEAV01@AEBN@Z */
1778 /* ??X?$complex@O@std@@QAEAAV01@ABO@Z */
1779 /* ??X?$complex@O@std@@QEAAAEAV01@AEBO@Z */
1780 DEFINE_THISCALL_WRAPPER(complex_double_mult_assign_double, 8)
1781 complex_double* __thiscall complex_double_mult_assign_double(complex_double *this, const double *r)
1782 {
1783     this->real *= *r;
1784     this->imag *= *r;
1785     return this;
1786 }
1787
1788 /* ??X?$complex@N@std@@QAEAAV01@ABV01@@Z */
1789 /* ??X?$complex@N@std@@QEAAAEAV01@AEBV01@@Z */
1790 /* ??X?$complex@O@std@@QAEAAV01@ABV01@@Z */
1791 /* ??X?$complex@O@std@@QEAAAEAV01@AEBV01@@Z */
1792 DEFINE_THISCALL_WRAPPER(complex_double_mult_assign, 8)
1793 complex_double* __thiscall complex_double_mult_assign(complex_double *this, const complex_double *r)
1794 {
1795     complex_double tmp = *this;
1796
1797     this->real = tmp.real*r->real - tmp.imag*r->imag;
1798     this->imag = tmp.real*r->imag + tmp.imag*r->real;
1799     return this;
1800 }
1801
1802 /* ??Y?$complex@N@std@@QAEAAV01@ABN@Z */
1803 /* ??Y?$complex@N@std@@QEAAAEAV01@AEBN@Z */
1804 /* ??Y?$complex@O@std@@QAEAAV01@ABO@Z */
1805 /* ??Y?$complex@O@std@@QEAAAEAV01@AEBO@Z */
1806 DEFINE_THISCALL_WRAPPER(complex_double_add_assign_double, 8)
1807 complex_double* __thiscall complex_double_add_assign_double(complex_double *this, const double *r)
1808 {
1809     this->real += *r;
1810     return this;
1811 }
1812
1813 /* ??Y?$complex@N@std@@QAEAAV01@ABV01@@Z */
1814 /* ??Y?$complex@N@std@@QEAAAEAV01@AEBV01@@Z */
1815 /* ??Y?$complex@O@std@@QAEAAV01@ABV01@@Z */
1816 /* ??Y?$complex@O@std@@QEAAAEAV01@AEBV01@@Z */
1817 DEFINE_THISCALL_WRAPPER(complex_double_add_assign, 8)
1818 complex_double* __thiscall complex_double_add_assign(complex_double *this, const complex_double *r)
1819 {
1820     this->real += r->real;
1821     this->imag += r->imag;
1822     return this;
1823 }
1824
1825 /* ??Z?$complex@N@std@@QAEAAV01@ABN@Z */
1826 /* ??Z?$complex@N@std@@QEAAAEAV01@AEBN@Z */
1827 /* ??Z?$complex@O@std@@QAEAAV01@ABO@Z */
1828 /* ??Z?$complex@O@std@@QEAAAEAV01@AEBO@Z */
1829 DEFINE_THISCALL_WRAPPER(complex_double_sub_assign_double, 8)
1830 complex_double* __thiscall complex_double_sub_assign_double(complex_double *this, const double *r)
1831 {
1832     this->real -= *r;
1833     return this;
1834 }
1835
1836 /* ??Z?$complex@N@std@@QAEAAV01@ABV01@@Z */
1837 /* ??Z?$complex@N@std@@QEAAAEAV01@AEBV01@@Z */
1838 /* ??Z?$complex@O@std@@QAEAAV01@ABV01@@Z */
1839 /* ??Z?$complex@O@std@@QEAAAEAV01@AEBV01@@Z */
1840 DEFINE_THISCALL_WRAPPER(complex_double_sub_assign, 8)
1841 complex_double* __thiscall complex_double_sub_assign(complex_double *this, const complex_double *r)
1842 {
1843     this->real -= r->real;
1844     this->imag -= r->imag;
1845     return this;
1846 }
1847
1848 /* ??_0?$complex@N@std@@QAEAAV01@ABN@Z */
1849 /* ??_0?$complex@N@std@@QEAAAEAV01@AEBN@Z */
1850 /* ??_0?$complex@O@std@@QAEAAV01@ABO@Z */
1851 /* ??_0?$complex@O@std@@QEAAAEAV01@AEBO@Z */
1852 DEFINE_THISCALL_WRAPPER(complex_double_div_assign_double, 8)
1853 complex_double* __thiscall complex_double_div_assign_double(complex_double *this, const double *r)
1854 {
1855     this->real /= *r;
1856     this->imag /= *r;
1857     return this;
1858 }
1859
1860 /* ??_0?$complex@N@std@@QAEAAV01@ABV01@@Z */
1861 /* ??_0?$complex@N@std@@QEAAAEAV01@AEBV01@@Z */
1862 /* ??_0?$complex@O@std@@QAEAAV01@ABV01@@Z */
1863 /* ??_0?$complex@O@std@@QEAAAEAV01@AEBV01@@Z */
1864 DEFINE_THISCALL_WRAPPER(complex_double_div_assign, 8)
1865 complex_double* __thiscall complex_double_div_assign(complex_double *this, const complex_double *r)
1866 {
1867     complex_double tmp = *this;
1868     return complex_double_div(this, &tmp, r);
1869 }
1870
1871 /* ??$arg@N@std@@YANABV?$complex@N@0@@Z */
1872 /* ??$arg@N@std@@YANAEBV?$complex@N@0@@Z */
1873 /* ??$arg@O@std@@YAOABV?$complex@O@0@@Z */
1874 /* ??$arg@O@std@@YAOAEBV?$complex@O@0@@Z */
1875 double __cdecl complex_double_arg(const complex_double *c)
1876 {
1877     return atan2(c->imag, c->real);
1878 }
1879
1880 /* ??$imag@N@std@@YANABV?$complex@N@0@@Z */
1881 /* ??$imag@N@std@@YANAEBV?$complex@N@0@@Z */
1882 /* ??$imag@O@std@@YAOABV?$complex@O@0@@Z */
1883 /* ??$imag@O@std@@YAOAEBV?$complex@O@0@@Z */
1884 double __cdecl complex_double_imag(const complex_double *c)
1885 {
1886     return c->imag;
1887 }
1888
1889 /* ?imag@?$_Complex_base@NU_C_double_complex@@@std@@QAENABN@Z */
1890 /* ?imag@?$_Complex_base@NU_C_double_complex@@@std@@QEAANAEBN@Z */
1891 /* ?imag@?$_Complex_base@OU_C_ldouble_complex@@@std@@QAEOABO@Z */
1892 /* ?imag@?$_Complex_base@OU_C_ldouble_complex@@@std@@QEAAOAEBO@Z */
1893 DEFINE_THISCALL_WRAPPER(complex_double_imag_set, 8)
1894 double __thiscall complex_double_imag_set(complex_double *this, const double *d)
1895 {
1896     return (this->imag = *d);
1897 }
1898
1899 /* ?imag@?$_Complex_base@NU_C_double_complex@@@std@@QBENXZ */
1900 /* ?imag@?$_Complex_base@NU_C_double_complex@@@std@@QEBANXZ */
1901 /* ?imag@?$_Complex_base@OU_C_ldouble_complex@@@std@@QBEOXZ */
1902 /* ?imag@?$_Complex_base@OU_C_ldouble_complex@@@std@@QEBAOXZ */
1903 DEFINE_THISCALL_WRAPPER(complex_double_imag_get, 4)
1904 double __thiscall complex_double_imag_get(const complex_double *this)
1905 {
1906     return this->imag;
1907 }
1908
1909 /* ??$real@N@std@@YANABV?$complex@N@0@@Z */
1910 /* ??$real@N@std@@YANAEBV?$complex@N@0@@Z */
1911 /* ??$real@O@std@@YAOABV?$complex@O@0@@Z */
1912 /* ??$real@O@std@@YAOAEBV?$complex@O@0@@Z */
1913 double __cdecl complex_double_real(const complex_double *c)
1914 {
1915     return c->real;
1916 }
1917
1918 /* ?real@?$_Complex_base@NU_C_double_complex@@@std@@QAENABN@Z */
1919 /* ?real@?$_Complex_base@NU_C_double_complex@@@std@@QEAANAEBN@Z */
1920 /* ?real@?$_Complex_base@OU_C_ldouble_complex@@@std@@QAEOABO@Z */
1921 /* ?real@?$_Complex_base@OU_C_ldouble_complex@@@std@@QEAAOAEBO@Z */
1922 DEFINE_THISCALL_WRAPPER(complex_double_real_set, 8)
1923 double __thiscall complex_double_real_set(complex_double *this, const double *d)
1924 {
1925     return (this->real = *d);
1926 }
1927
1928 /* ?real@?$_Complex_base@NU_C_double_complex@@@std@@QBENXZ */
1929 /* ?real@?$_Complex_base@NU_C_double_complex@@@std@@QEBANXZ */
1930 /* ?real@?$_Complex_base@OU_C_ldouble_complex@@@std@@QBEOXZ */
1931 /* ?real@?$_Complex_base@OU_C_ldouble_complex@@@std@@QEBAOXZ */
1932 DEFINE_THISCALL_WRAPPER(complex_double_real_get, 4)
1933 double __thiscall complex_double_real_get(const complex_double *this)
1934 {
1935     return this->real;
1936 }
1937
1938 /* ??$_Fabs@N@std@@YANABV?$complex@N@0@PAH@Z */
1939 /* ??$_Fabs@N@std@@YANAEBV?$complex@N@0@PEAH@Z */
1940 /* ??$_Fabs@O@std@@YAOABV?$complex@O@0@PAH@Z */
1941 /* ??$_Fabs@O@std@@YAOAEBV?$complex@O@0@PEAH@Z */
1942 double __cdecl complex_double__Fabs(const complex_double *c, int *scale)
1943 {
1944     double ret;
1945
1946     ret = hypot(c->real, c->imag);
1947     if(_isnan(ret) || ret==0) {
1948         *scale = 0;
1949     }else if(ret >= 1) {
1950         *scale = 2;
1951         ret /= 4;
1952     }else {
1953         *scale = -2;
1954         ret *= 4;
1955     }
1956
1957     return ret;
1958 }
1959
1960 /* ??$abs@N@std@@YANABV?$complex@N@0@@Z */
1961 /* ??$abs@N@std@@YANAEBV?$complex@N@0@@Z */
1962 /* ??$abs@O@std@@YAOABV?$complex@O@0@@Z */
1963 /* ??$abs@O@std@@YAOAEBV?$complex@O@0@@Z */
1964 double __cdecl complex_double_abs(const complex_double *c)
1965 {
1966     return hypot(c->real, c->imag);
1967 }
1968
1969 /* ??$conj@N@std@@YA?AV?$complex@N@0@ABV10@@Z */
1970 /* ??$conj@N@std@@YA?AV?$complex@N@0@AEBV10@@Z */
1971 /* ??$conj@O@std@@YA?AV?$complex@O@0@ABV10@@Z */
1972 /* ??$conj@O@std@@YA?AV?$complex@O@0@AEBV10@@Z */
1973 complex_double* __cdecl complex_double_conj(complex_double *ret, const complex_double *c)
1974 {
1975     ret->real = c->real;
1976     ret->imag = -c->imag;
1977     return ret;
1978 }
1979
1980 /* ??$cos@N@std@@YA?AV?$complex@N@0@ABV10@@Z */
1981 /* ??$cos@N@std@@YA?AV?$complex@N@0@AEBV10@@Z */
1982 /* ??$cos@O@std@@YA?AV?$complex@O@0@ABV10@@Z */
1983 /* ??$cos@O@std@@YA?AV?$complex@O@0@AEBV10@@Z */
1984 complex_double* __cdecl complex_double_cos(complex_double *ret, const complex_double *c)
1985 {
1986     ret->real = cos(c->real)*cosh(c->imag);
1987     ret->imag = -sin(c->real)*sinh(c->imag);
1988     return ret;
1989 }
1990
1991 /* ??$sin@N@std@@YA?AV?$complex@N@0@ABV10@@Z */
1992 /* ??$sin@N@std@@YA?AV?$complex@N@0@AEBV10@@Z */
1993 /* ??$sin@O@std@@YA?AV?$complex@O@0@ABV10@@Z */
1994 /* ??$sin@O@std@@YA?AV?$complex@O@0@AEBV10@@Z */
1995 complex_double* __cdecl complex_double_sin(complex_double *ret, const complex_double *c)
1996 {
1997     ret->real = sin(c->real)*cosh(c->imag);
1998     ret->imag = cos(c->real)*sinh(c->imag);
1999     return ret;
2000 }
2001
2002 /* ??$tan@N@std@@YA?AV?$complex@N@0@ABV10@@Z */
2003 /* ??$tan@N@std@@YA?AV?$complex@N@0@AEBV10@@Z */
2004 /* ??$tan@O@std@@YA?AV?$complex@O@0@ABV10@@Z */
2005 /* ??$tan@O@std@@YA?AV?$complex@O@0@AEBV10@@Z */
2006 complex_double* __cdecl complex_double_tan(complex_double *ret, const complex_double *c)
2007 {
2008     double denom = cos(2*c->real) + cosh(2*c->imag);
2009     ret->real = sin(2*c->real) / denom;
2010     ret->imag = sinh(2*c->imag) / denom;
2011     return ret;
2012 }
2013
2014 /* ??$cosh@N@std@@YA?AV?$complex@N@0@ABV10@@Z */
2015 /* ??$cosh@N@std@@YA?AV?$complex@N@0@AEBV10@@Z */
2016 /* ??$cosh@O@std@@YA?AV?$complex@O@0@ABV10@@Z */
2017 /* ??$cosh@O@std@@YA?AV?$complex@O@0@AEBV10@@Z */
2018 complex_double* __cdecl complex_double_cosh(complex_double *ret, const complex_double *c)
2019 {
2020     ret->real = cosh(c->real)*cos(c->imag);
2021     ret->imag = sinh(c->real)*sin(c->imag);
2022     return ret;
2023 }
2024
2025 /* ??$sinh@N@std@@YA?AV?$complex@N@0@ABV10@@Z */
2026 /* ??$sinh@N@std@@YA?AV?$complex@N@0@AEBV10@@Z */
2027 /* ??$sinh@O@std@@YA?AV?$complex@O@0@ABV10@@Z */
2028 /* ??$sinh@O@std@@YA?AV?$complex@O@0@AEBV10@@Z */
2029 complex_double* __cdecl complex_double_sinh(complex_double *ret, const complex_double *c)
2030 {
2031     ret->real = sinh(c->real)*cos(c->imag);
2032     ret->imag = cosh(c->real)*sin(c->imag);
2033     return ret;
2034 }
2035
2036 /* ??$tanh@N@std@@YA?AV?$complex@N@0@ABV10@@Z */
2037 /* ??$tanh@N@std@@YA?AV?$complex@N@0@AEBV10@@Z */
2038 /* ??$tanh@O@std@@YA?AV?$complex@O@0@ABV10@@Z */
2039 /* ??$tanh@O@std@@YA?AV?$complex@O@0@AEBV10@@Z */
2040 complex_double* __cdecl complex_double_tanh(complex_double *ret, const complex_double *c)
2041 {
2042     complex_double tmp;
2043
2044     ret->real = -c->imag;
2045     ret->imag = c->real;
2046     complex_double_tan(&tmp, ret);
2047     ret->real = tmp.imag;
2048     ret->imag = -tmp.real;
2049     return ret;
2050 }
2051
2052 /* ??$exp@N@std@@YA?AV?$complex@N@0@ABV10@@Z */
2053 /* ??$exp@N@std@@YA?AV?$complex@N@0@AEBV10@@Z */
2054 /* ??$exp@O@std@@YA?AV?$complex@O@0@ABV10@@Z */
2055 /* ??$exp@O@std@@YA?AV?$complex@O@0@AEBV10@@Z */
2056 complex_double* __cdecl complex_double_exp(complex_double *ret, const complex_double *c)
2057 {
2058     ret->real = ret->imag = exp(c->real);
2059     ret->real *= cos(c->imag);
2060     ret->imag *= sin(c->imag);
2061     return ret;
2062 }
2063
2064 /* ??$log@N@std@@YA?AV?$complex@N@0@ABV10@@Z */
2065 /* ??$log@N@std@@YA?AV?$complex@N@0@AEBV10@@Z */
2066 /* ??$log@O@std@@YA?AV?$complex@O@0@ABV10@@Z */
2067 /* ??$log@O@std@@YA?AV?$complex@O@0@AEBV10@@Z */
2068 complex_double* __cdecl complex_double_log(complex_double *ret, const complex_double *c)
2069 {
2070     ret->real = log(complex_double_abs(c));
2071     ret->imag = complex_double_arg(c);
2072     return ret;
2073 }
2074
2075 /* ??$log10@N@std@@YA?AV?$complex@N@0@ABV10@@Z */
2076 /* ??$log10@N@std@@YA?AV?$complex@N@0@AEBV10@@Z */
2077 /* ??$log10@O@std@@YA?AV?$complex@O@0@ABV10@@Z */
2078 /* ??$log10@O@std@@YA?AV?$complex@O@0@AEBV10@@Z */
2079 complex_double* __cdecl complex_double_log10(complex_double *ret, const complex_double *c)
2080 {
2081     complex_double_log(ret, c);
2082     ret->real *= M_LOG10E;
2083     ret->imag *= M_LOG10E;
2084     return ret;
2085 }
2086
2087 /* ??$norm@N@std@@YANABV?$complex@N@0@@Z */
2088 /* ??$norm@N@std@@YANAEBV?$complex@N@0@@Z */
2089 /* ??$norm@O@std@@YAOABV?$complex@O@0@@Z */
2090 /* ??$norm@O@std@@YAOAEBV?$complex@O@0@@Z */
2091 double __cdecl complex_double_norm(const complex_double *c)
2092 {
2093     return c->real*c->real + c->imag*c->imag;
2094 }
2095
2096 /* ??$polar@N@std@@YA?AV?$complex@N@0@ABN0@Z */
2097 /* ??$polar@N@std@@YA?AV?$complex@N@0@AEBN0@Z */
2098 /* ??$polar@O@std@@YA?AV?$complex@O@0@ABO0@Z */
2099 /* ??$polar@O@std@@YA?AV?$complex@O@0@AEBO0@Z */
2100 complex_double* __cdecl complex_double_polar_theta(complex_double *ret, const double *mod, const double *theta)
2101 {
2102     ret->real = *mod * cos(*theta);
2103     ret->imag = *mod * sin(*theta);
2104     return ret;
2105 }
2106
2107 /* ??$polar@N@std@@YA?AV?$complex@N@0@ABN@Z */
2108 /* ??$polar@N@std@@YA?AV?$complex@N@0@AEBN@Z */
2109 /* ??$polar@O@std@@YA?AV?$complex@O@0@ABO@Z */
2110 /* ??$polar@O@std@@YA?AV?$complex@O@0@AEBO@Z */
2111 complex_double* __cdecl complex_double_polar(complex_double *ret, const double *mod)
2112 {
2113     ret->real = *mod;
2114     ret->imag = 0;
2115     return ret;
2116 }
2117
2118 /* ??$pow@N@std@@YA?AV?$complex@N@0@ABV10@0@Z */
2119 /* ??$pow@N@std@@YA?AV?$complex@N@0@AEBV10@0@Z */
2120 /* ??$pow@O@std@@YA?AV?$complex@O@0@ABV10@0@Z */
2121 /* ??$pow@O@std@@YA?AV?$complex@O@0@AEBV10@0@Z */
2122 complex_double* __cdecl complex_double_pow(complex_double *ret, const complex_double *l, const complex_double *r)
2123 {
2124     double abs = complex_double_abs(l), arg = complex_double_arg(l);
2125     double rad = pow(abs, r->real), theta = r->real*arg;
2126
2127     if(r->imag) {
2128         rad *= exp(-r->imag * arg);
2129         theta += r->imag * log(abs);
2130     }
2131
2132     ret->real = rad * cos(theta);
2133     ret->imag = rad * sin(theta);
2134     return ret;
2135 }
2136
2137 /* ??$pow@N@std@@YA?AV?$complex@N@0@ABNABV10@@Z */
2138 /* ??$pow@N@std@@YA?AV?$complex@N@0@AEBNAEBV10@@Z */
2139 /* ??$pow@O@std@@YA?AV?$complex@O@0@ABOABV10@@Z */
2140 /* ??$pow@O@std@@YA?AV?$complex@O@0@AEBOAEBV10@@Z */
2141 complex_double* __cdecl complex_double_pow_dc(complex_double *ret, const double *l, const complex_double *r)
2142 {
2143     complex_double c = { *l, 0 };
2144     return complex_double_pow(ret, &c, r);
2145 }
2146
2147 /* ??$pow@N@std@@YA?AV?$complex@N@0@ABV10@ABN@Z */
2148 /* ??$pow@N@std@@YA?AV?$complex@N@0@AEBV10@AEBN@Z */
2149 /* ??$pow@O@std@@YA?AV?$complex@O@0@ABV10@ABO@Z */
2150 /* ??$pow@O@std@@YA?AV?$complex@O@0@AEBV10@AEBO@Z */
2151 complex_double* __cdecl complex_double_pow_cd(complex_double *ret, const complex_double *l, const double *r)
2152 {
2153     complex_double c = { *r, 0 };
2154     return complex_double_pow(ret, l, &c);
2155 }
2156
2157 /* ??$sqrt@N@std@@YA?AV?$complex@N@0@ABV10@@Z */
2158 /* ??$sqrt@N@std@@YA?AV?$complex@N@0@AEBV10@@Z */
2159 /* ??$sqrt@O@std@@YA?AV?$complex@O@0@ABV10@@Z */
2160 /* ??$sqrt@O@std@@YA?AV?$complex@O@0@AEBV10@@Z */
2161 complex_double* __cdecl complex_double_sqrt(complex_double *ret, const complex_double *l)
2162 {
2163     complex_double c = { 0.5, 0 };
2164     return complex_double_pow(ret, l, &c);
2165 }