msvcp90: Added std::pow(complex) and std::sqrt(complex) implementation.
This commit is contained in:
parent
2350e48f20
commit
68f538faaa
|
@ -1427,6 +1427,47 @@ complex_float* __cdecl complex_float_polar(complex_float *ret, const float *mod)
|
|||
return ret;
|
||||
}
|
||||
|
||||
/* ??$pow@M@std@@YA?AV?$complex@M@0@ABV10@0@Z */
|
||||
/* ??$pow@M@std@@YA?AV?$complex@M@0@AEBV10@0@Z */
|
||||
complex_float* __cdecl complex_float_pow(complex_float *ret, const complex_float *l, const complex_float *r)
|
||||
{
|
||||
float abs = complex_float_abs(l), arg = complex_float_arg(l);
|
||||
float rad = pow(abs, r->real), theta = r->real*arg;
|
||||
|
||||
if(r->imag) {
|
||||
rad *= exp(-r->imag * arg);
|
||||
theta += r->imag * log(abs);
|
||||
}
|
||||
|
||||
ret->real = rad * cos(theta);
|
||||
ret->imag = rad * sin(theta);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* ??$pow@M@std@@YA?AV?$complex@M@0@ABMABV10@@Z */
|
||||
/* ??$pow@M@std@@YA?AV?$complex@M@0@AEBMAEBV10@@Z */
|
||||
complex_float* __cdecl complex_float_pow_fc(complex_float *ret, const float *l, const complex_float *r)
|
||||
{
|
||||
complex_float c = { *l, 0 };
|
||||
return complex_float_pow(ret, &c, r);
|
||||
}
|
||||
|
||||
/* ??$pow@M@std@@YA?AV?$complex@M@0@ABV10@ABM@Z */
|
||||
/* ??$pow@M@std@@YA?AV?$complex@M@0@AEBV10@AEBM@Z */
|
||||
complex_float* __cdecl complex_float_pow_cf(complex_float *ret, const complex_float *l, const float *r)
|
||||
{
|
||||
complex_float c = { *r, 0 };
|
||||
return complex_float_pow(ret, l, &c);
|
||||
}
|
||||
|
||||
/* ??$sqrt@M@std@@YA?AV?$complex@M@0@ABV10@@Z */
|
||||
/* ??$sqrt@M@std@@YA?AV?$complex@M@0@AEBV10@@Z */
|
||||
complex_float* __cdecl complex_float_sqrt(complex_float *ret, const complex_float *l)
|
||||
{
|
||||
complex_float c = { 0.5, 0 };
|
||||
return complex_float_pow(ret, l, &c);
|
||||
}
|
||||
|
||||
/* ??0?$_Complex_base@NU_C_double_complex@@@std@@QAE@ABN0@Z */
|
||||
/* ??0?$_Complex_base@NU_C_double_complex@@@std@@QEAA@AEBN0@Z */
|
||||
/* ??0?$_Complex_base@OU_C_ldouble_complex@@@std@@QAE@ABO0@Z */
|
||||
|
@ -2073,3 +2114,52 @@ complex_double* __cdecl complex_double_polar(complex_double *ret, const double *
|
|||
ret->imag = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* ??$pow@N@std@@YA?AV?$complex@N@0@ABV10@0@Z */
|
||||
/* ??$pow@N@std@@YA?AV?$complex@N@0@AEBV10@0@Z */
|
||||
/* ??$pow@O@std@@YA?AV?$complex@O@0@ABV10@0@Z */
|
||||
/* ??$pow@O@std@@YA?AV?$complex@O@0@AEBV10@0@Z */
|
||||
complex_double* __cdecl complex_double_pow(complex_double *ret, const complex_double *l, const complex_double *r)
|
||||
{
|
||||
double abs = complex_double_abs(l), arg = complex_double_arg(l);
|
||||
double rad = pow(abs, r->real), theta = r->real*arg;
|
||||
|
||||
if(r->imag) {
|
||||
rad *= exp(-r->imag * arg);
|
||||
theta += r->imag * log(abs);
|
||||
}
|
||||
|
||||
ret->real = rad * cos(theta);
|
||||
ret->imag = rad * sin(theta);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* ??$pow@N@std@@YA?AV?$complex@N@0@ABNABV10@@Z */
|
||||
/* ??$pow@N@std@@YA?AV?$complex@N@0@AEBNAEBV10@@Z */
|
||||
/* ??$pow@O@std@@YA?AV?$complex@O@0@ABOABV10@@Z */
|
||||
/* ??$pow@O@std@@YA?AV?$complex@O@0@AEBOAEBV10@@Z */
|
||||
complex_double* __cdecl complex_double_pow_dc(complex_double *ret, const double *l, const complex_double *r)
|
||||
{
|
||||
complex_double c = { *l, 0 };
|
||||
return complex_double_pow(ret, &c, r);
|
||||
}
|
||||
|
||||
/* ??$pow@N@std@@YA?AV?$complex@N@0@ABV10@ABN@Z */
|
||||
/* ??$pow@N@std@@YA?AV?$complex@N@0@AEBV10@AEBN@Z */
|
||||
/* ??$pow@O@std@@YA?AV?$complex@O@0@ABV10@ABO@Z */
|
||||
/* ??$pow@O@std@@YA?AV?$complex@O@0@AEBV10@AEBO@Z */
|
||||
complex_double* __cdecl complex_double_pow_cd(complex_double *ret, const complex_double *l, const double *r)
|
||||
{
|
||||
complex_double c = { *r, 0 };
|
||||
return complex_double_pow(ret, l, &c);
|
||||
}
|
||||
|
||||
/* ??$sqrt@N@std@@YA?AV?$complex@N@0@ABV10@@Z */
|
||||
/* ??$sqrt@N@std@@YA?AV?$complex@N@0@AEBV10@@Z */
|
||||
/* ??$sqrt@O@std@@YA?AV?$complex@O@0@ABV10@@Z */
|
||||
/* ??$sqrt@O@std@@YA?AV?$complex@O@0@AEBV10@@Z */
|
||||
complex_double* __cdecl complex_double_sqrt(complex_double *ret, const complex_double *l)
|
||||
{
|
||||
complex_double c = { 0.5, 0 };
|
||||
return complex_double_pow(ret, l, &c);
|
||||
}
|
||||
|
|
|
@ -434,28 +434,28 @@
|
|||
@ cdecl -arch=win64 ??$polar@O@std@@YA?AV?$complex@O@0@AEBO0@Z(ptr ptr ptr) complex_double_polar_theta
|
||||
@ cdecl -arch=win32 ??$polar@O@std@@YA?AV?$complex@O@0@ABO@Z(ptr ptr) complex_double_polar
|
||||
@ cdecl -arch=win64 ??$polar@O@std@@YA?AV?$complex@O@0@AEBO@Z(ptr ptr) complex_double_polar
|
||||
@ stub -arch=win32 ??$pow@M@std@@YA?AV?$complex@M@0@ABMABV10@@Z
|
||||
@ stub -arch=win64 ??$pow@M@std@@YA?AV?$complex@M@0@AEBMAEBV10@@Z
|
||||
@ stub -arch=win32 ??$pow@M@std@@YA?AV?$complex@M@0@ABV10@0@Z
|
||||
@ stub -arch=win64 ??$pow@M@std@@YA?AV?$complex@M@0@AEBV10@0@Z
|
||||
@ stub -arch=win32 ??$pow@M@std@@YA?AV?$complex@M@0@ABV10@ABM@Z
|
||||
@ stub -arch=win64 ??$pow@M@std@@YA?AV?$complex@M@0@AEBV10@AEBM@Z
|
||||
@ cdecl -arch=win32 ??$pow@M@std@@YA?AV?$complex@M@0@ABMABV10@@Z(ptr ptr ptr) complex_float_pow_fc
|
||||
@ cdecl -arch=win64 ??$pow@M@std@@YA?AV?$complex@M@0@AEBMAEBV10@@Z(ptr ptr ptr) complex_float_pow_fc
|
||||
@ cdecl -arch=win32 ??$pow@M@std@@YA?AV?$complex@M@0@ABV10@0@Z(ptr ptr ptr) complex_float_pow
|
||||
@ cdecl -arch=win64 ??$pow@M@std@@YA?AV?$complex@M@0@AEBV10@0@Z(ptr ptr ptr) complex_float_pow
|
||||
@ cdecl -arch=win32 ??$pow@M@std@@YA?AV?$complex@M@0@ABV10@ABM@Z(ptr ptr ptr) complex_float_pow_cf
|
||||
@ cdecl -arch=win64 ??$pow@M@std@@YA?AV?$complex@M@0@AEBV10@AEBM@Z(ptr ptr ptr) complex_float_pow_cf
|
||||
@ stub -arch=win32 ??$pow@M@std@@YA?AV?$complex@M@0@ABV10@H@Z
|
||||
@ stub -arch=win64 ??$pow@M@std@@YA?AV?$complex@M@0@AEBV10@H@Z
|
||||
@ stub -arch=win32 ??$pow@N@std@@YA?AV?$complex@N@0@ABNABV10@@Z
|
||||
@ stub -arch=win64 ??$pow@N@std@@YA?AV?$complex@N@0@AEBNAEBV10@@Z
|
||||
@ stub -arch=win32 ??$pow@N@std@@YA?AV?$complex@N@0@ABV10@0@Z
|
||||
@ stub -arch=win64 ??$pow@N@std@@YA?AV?$complex@N@0@AEBV10@0@Z
|
||||
@ stub -arch=win32 ??$pow@N@std@@YA?AV?$complex@N@0@ABV10@ABN@Z
|
||||
@ stub -arch=win64 ??$pow@N@std@@YA?AV?$complex@N@0@AEBV10@AEBN@Z
|
||||
@ cdecl -arch=win32 ??$pow@N@std@@YA?AV?$complex@N@0@ABNABV10@@Z(ptr ptr ptr) complex_double_pow_dc
|
||||
@ cdecl -arch=win64 ??$pow@N@std@@YA?AV?$complex@N@0@AEBNAEBV10@@Z(ptr ptr ptr) complex_double_pow_dc
|
||||
@ cdecl -arch=win32 ??$pow@N@std@@YA?AV?$complex@N@0@ABV10@0@Z(ptr ptr ptr) complex_double_pow
|
||||
@ cdecl -arch=win64 ??$pow@N@std@@YA?AV?$complex@N@0@AEBV10@0@Z(ptr ptr ptr) complex_double_pow
|
||||
@ cdecl -arch=win32 ??$pow@N@std@@YA?AV?$complex@N@0@ABV10@ABN@Z(ptr ptr ptr) complex_double_pow_cd
|
||||
@ cdecl -arch=win64 ??$pow@N@std@@YA?AV?$complex@N@0@AEBV10@AEBN@Z(ptr ptr ptr) complex_double_pow_cd
|
||||
@ stub -arch=win32 ??$pow@N@std@@YA?AV?$complex@N@0@ABV10@H@Z
|
||||
@ stub -arch=win64 ??$pow@N@std@@YA?AV?$complex@N@0@AEBV10@H@Z
|
||||
@ stub -arch=win32 ??$pow@O@std@@YA?AV?$complex@O@0@ABOABV10@@Z
|
||||
@ stub -arch=win64 ??$pow@O@std@@YA?AV?$complex@O@0@AEBOAEBV10@@Z
|
||||
@ stub -arch=win32 ??$pow@O@std@@YA?AV?$complex@O@0@ABV10@0@Z
|
||||
@ stub -arch=win64 ??$pow@O@std@@YA?AV?$complex@O@0@AEBV10@0@Z
|
||||
@ stub -arch=win32 ??$pow@O@std@@YA?AV?$complex@O@0@ABV10@ABO@Z
|
||||
@ stub -arch=win64 ??$pow@O@std@@YA?AV?$complex@O@0@AEBV10@AEBO@Z
|
||||
@ cdecl -arch=win32 ??$pow@O@std@@YA?AV?$complex@O@0@ABOABV10@@Z(ptr ptr ptr) complex_double_pow_dc
|
||||
@ cdecl -arch=win64 ??$pow@O@std@@YA?AV?$complex@O@0@AEBOAEBV10@@Z(ptr ptr ptr) complex_double_pow_dc
|
||||
@ cdecl -arch=win32 ??$pow@O@std@@YA?AV?$complex@O@0@ABV10@0@Z(ptr ptr ptr) complex_double_pow
|
||||
@ cdecl -arch=win64 ??$pow@O@std@@YA?AV?$complex@O@0@AEBV10@0@Z(ptr ptr ptr) complex_double_pow
|
||||
@ cdecl -arch=win32 ??$pow@O@std@@YA?AV?$complex@O@0@ABV10@ABO@Z(ptr ptr ptr) complex_double_pow_cd
|
||||
@ cdecl -arch=win64 ??$pow@O@std@@YA?AV?$complex@O@0@AEBV10@AEBO@Z(ptr ptr ptr) complex_double_pow_cd
|
||||
@ stub -arch=win32 ??$pow@O@std@@YA?AV?$complex@O@0@ABV10@H@Z
|
||||
@ stub -arch=win64 ??$pow@O@std@@YA?AV?$complex@O@0@AEBV10@H@Z
|
||||
@ cdecl -arch=win32 ??$real@M@std@@YAMABV?$complex@M@0@@Z(ptr) complex_float_real
|
||||
|
@ -476,12 +476,12 @@
|
|||
@ cdecl -arch=win64 ??$sinh@N@std@@YA?AV?$complex@N@0@AEBV10@@Z(ptr ptr) complex_double_sinh
|
||||
@ cdecl -arch=win32 ??$sinh@O@std@@YA?AV?$complex@O@0@ABV10@@Z(ptr ptr) complex_double_sinh
|
||||
@ cdecl -arch=win64 ??$sinh@O@std@@YA?AV?$complex@O@0@AEBV10@@Z(ptr ptr) complex_double_sinh
|
||||
@ stub -arch=win32 ??$sqrt@M@std@@YA?AV?$complex@M@0@ABV10@@Z
|
||||
@ stub -arch=win64 ??$sqrt@M@std@@YA?AV?$complex@M@0@AEBV10@@Z
|
||||
@ stub -arch=win32 ??$sqrt@N@std@@YA?AV?$complex@N@0@ABV10@@Z
|
||||
@ stub -arch=win64 ??$sqrt@N@std@@YA?AV?$complex@N@0@AEBV10@@Z
|
||||
@ stub -arch=win32 ??$sqrt@O@std@@YA?AV?$complex@O@0@ABV10@@Z
|
||||
@ stub -arch=win64 ??$sqrt@O@std@@YA?AV?$complex@O@0@AEBV10@@Z
|
||||
@ cdecl -arch=win32 ??$sqrt@M@std@@YA?AV?$complex@M@0@ABV10@@Z(ptr ptr) complex_float_sqrt
|
||||
@ cdecl -arch=win64 ??$sqrt@M@std@@YA?AV?$complex@M@0@AEBV10@@Z(ptr ptr) complex_float_sqrt
|
||||
@ cdecl -arch=win32 ??$sqrt@N@std@@YA?AV?$complex@N@0@ABV10@@Z(ptr ptr) complex_double_sqrt
|
||||
@ cdecl -arch=win64 ??$sqrt@N@std@@YA?AV?$complex@N@0@AEBV10@@Z(ptr ptr) complex_double_sqrt
|
||||
@ cdecl -arch=win32 ??$sqrt@O@std@@YA?AV?$complex@O@0@ABV10@@Z(ptr ptr) complex_double_sqrt
|
||||
@ cdecl -arch=win64 ??$sqrt@O@std@@YA?AV?$complex@O@0@AEBV10@@Z(ptr ptr) complex_double_sqrt
|
||||
@ cdecl -arch=win32 ??$tan@M@std@@YA?AV?$complex@M@0@ABV10@@Z(ptr ptr) complex_float_tan
|
||||
@ cdecl -arch=win64 ??$tan@M@std@@YA?AV?$complex@M@0@AEBV10@@Z(ptr ptr) complex_float_tan
|
||||
@ cdecl -arch=win32 ??$tan@N@std@@YA?AV?$complex@N@0@ABV10@@Z(ptr ptr) complex_double_tan
|
||||
|
|
Loading…
Reference in New Issue