windows-nt/Source/XPSP1/NT/public/sdk/inc/crt/xcomplex
2020-09-26 16:20:57 +08:00

528 lines
23 KiB
Plaintext

// xcomplex internal header
// TEMPLATE FUNCTION imag
_TMPLT(_Ty) inline
_Ty __cdecl imag(const _CMPLX(_Ty)& _X)
{return (_X.imag()); }
// TEMPLATE FUNCTION real
_TMPLT(_Ty) inline
_Ty __cdecl real(const _CMPLX(_Ty)& _X)
{return (_X.real()); }
// TEMPLATE FUNCTION _Fabs
_TMPLT(_Ty) inline
_Ty __cdecl _Fabs(const _CMPLX(_Ty)& _X, int *_Pexp)
{*_Pexp = 0;
_Ty _A = real(_X);
_Ty _B = imag(_X);
if (_CTR(_Ty)::_Isnan(_A))
return (_A);
else if (_CTR(_Ty)::_Isnan(_B))
return (_B);
else
{if (_A < 0)
_A = -_A;
if (_B < 0)
_B = -_B;
if (_A < _B)
{_Ty _W = _A;
_A = _B, _B = _W; }
if (_A == 0 || _CTR(_Ty)::_Isinf(_A))
return (_A);
if (1 <= _A)
*_Pexp = 2, _A = _A * 0.25, _B = _B * 0.25;
else
*_Pexp = -2, _A = _A * 4, _B = _B * 4;
_Ty _W = _A - _B;
if (_W == _A)
return (_A);
else if (_B < _W)
{const _Ty _Q = _A / _B;
return (_A + _B
/ (_Q + _CTR(_Ty)::sqrt(_Q * _Q + 1))); }
else
{static const _Ty _R2 = (const _Ty)1.4142135623730950488L;
static const _Ty _Xh = (const _Ty)2.4142L;
static const _Ty _Xl = (const _Ty)0.0000135623730950488016887L;
const _Ty _Q = _W / _B;
const _Ty _R = (_Q + 2) * _Q;
const _Ty _S = _R / (_R2 + _CTR(_Ty)::sqrt(_R + 2))
+ _Xl + _Q + _Xh;
return (_A + _B / _S); }}}
// TEMPLATE FUNCTION operator+
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl operator+(const _CMPLX(_Ty)& _L,
const _CMPLX(_Ty)& _R)
{_CMPLX(_Ty) _W(_L);
return (_W += _R); }
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl operator+(const _CMPLX(_Ty)& _L, const _Ty& _R)
{_CMPLX(_Ty) _W(_L);
_W.real(_W.real() + _R);
return (_W); }
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl operator+(const _Ty& _L, const _CMPLX(_Ty)& _R)
{_CMPLX(_Ty) _W(_L);
return (_W += _R); }
// TEMPLATE FUNCTION operator-
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl operator-(const _CMPLX(_Ty)& _L,
const _CMPLX(_Ty)& _R)
{_CMPLX(_Ty) _W(_L);
return (_W -= _R); }
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl operator-(const _CMPLX(_Ty)& _L, const _Ty& _R)
{_CMPLX(_Ty) _W(_L);
_W.real(_W.real() - _R);
return (_W); }
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl operator-(const _Ty& _L, const _CMPLX(_Ty)& _R)
{_CMPLX(_Ty) _W(_L);
return (_W -= _R); }
// TEMPLATE FUNCTION operator*
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl operator*(const _CMPLX(_Ty)& _L,
const _CMPLX(_Ty)& _R)
{_CMPLX(_Ty) _W(_L);
return (_W *= _R); }
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl operator*(const _CMPLX(_Ty)& _L, const _Ty& _R)
{_CMPLX(_Ty) _W(_L);
_W.real(_W.real() * _R);
_W.imag(_W.imag() * _R);
return (_W); }
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl operator*(const _Ty& _L, const _CMPLX(_Ty)& _R)
{_CMPLX(_Ty) _W(_L);
return (_W *= _R); }
// TEMPLATE FUNCTION operator/
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl operator/(const _CMPLX(_Ty)& _L,
const _CMPLX(_Ty)& _R)
{_CMPLX(_Ty) _W(_L);
return (_W /= _R); }
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl operator/(const _CMPLX(_Ty)& _L, const _Ty& _R)
{_CMPLX(_Ty) _W(_L);
_W.real(_W.real() / _R);
_W.imag(_W.imag() / _R);
return (_W); }
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl operator/(const _Ty& _L, const _CMPLX(_Ty)& _R)
{_CMPLX(_Ty) _W(_L);
return (_W /= _R); }
// TEMPLATE FUNCTION UNARY operator+
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl operator+(const _CMPLX(_Ty)& _L)
{return (_CMPLX(_Ty)(_L)); }
// TEMPLATE FUNCTION UNARY operator-
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl operator-(const _CMPLX(_Ty)& _L)
{return (_CMPLX(_Ty)(-real(_L), -imag(_L))); }
// TEMPLATE FUNCTION operator==
_TMPLT(_Ty) inline
bool __cdecl operator==(const _CMPLX(_Ty)& _L, const _CMPLX(_Ty)& _R)
{return (real(_L) == real(_R) && imag(_L) == imag(_R)); }
_TMPLT(_Ty) inline
bool __cdecl operator==(const _CMPLX(_Ty)& _L, const _Ty& _R)
{return (real(_L) == _R && imag(_L) == 0); }
_TMPLT(_Ty) inline
bool __cdecl operator==(const _Ty& _L, const _CMPLX(_Ty)& _R)
{return (_L == real(_R) && 0 == imag(_R)); }
_TMPLT(_Ty) inline
bool __cdecl operator!=(const _CMPLX(_Ty)& _L, const _CMPLX(_Ty)& _R)
{return (!(_L == _R)); }
_TMPLT(_Ty) inline
bool __cdecl operator!=(const _CMPLX(_Ty)& _L, const _Ty& _R)
{return (!(_L == _R)); }
_TMPLT(_Ty) inline
bool __cdecl operator!=(const _Ty& _L, const _CMPLX(_Ty)& _R)
{return (!(_L == _R)); }
// TEMPLATE FUNCTION abs
_TMPLT(_Ty) inline
_Ty __cdecl abs(const _CMPLX(_Ty)& _X)
{int _Xexp;
_Ty _Rho = _Fabs(_X, &_Xexp);
if (_Xexp == 0)
return (_Rho);
else
return (_CTR(_Ty)::ldexp(_Rho, _Xexp)); }
// TEMPLATE FUNCTION arg
_TMPLT(_Ty) inline
_Ty __cdecl arg(const _CMPLX(_Ty)& _X)
{return (_CTR(_Ty)::atan2(imag(_X), real(_X))); }
// TEMPLATE FUNCTION conjg
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl conj(const _CMPLX(_Ty)& _X)
{return (_CMPLX(_Ty)(real(_X), -imag(_X))); }
// TEMPLATE FUNCTION cos
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl cos(const _CMPLX(_Ty)& _X)
{return (_CMPLX(_Ty)(
_CTR(_Ty)::_Cosh(imag(_X), _CTR(_Ty)::cos(real(_X))),
-_CTR(_Ty)::_Sinh(imag(_X),
_CTR(_Ty)::sin(real(_X))))); }
// TEMPLATE FUNCTION cosh
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl cosh(const _CMPLX(_Ty)& _X)
{return (_CMPLX(_Ty)(
_CTR(_Ty)::_Cosh(real(_X), _CTR(_Ty)::cos(imag(_X))),
_CTR(_Ty)::_Sinh(real(_X), _CTR(_Ty)::sin(imag(_X))))); }
// TEMPLATE FUNCTION exp
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl exp(const _CMPLX(_Ty)& _X)
{_Ty _Re(real(_X)), _Im(real(_X));
_CTR(_Ty)::_Exp(&_Re, _CTR(_Ty)::cos(imag(_X)), 0);
_CTR(_Ty)::_Exp(&_Im, _CTR(_Ty)::sin(imag(_X)), 0);
return (_CMPLX(_Ty)(_Re, _Im)); }
// TEMPLATE FUNCTION log
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl log(const _CMPLX(_Ty)& _X)
{int _Xexp;
_Ty _Rho = _Fabs(_X, &_Xexp);
if (_CTR(_Ty)::_Isnan(_Rho))
return (_CMPLX(_Ty)(_Rho, _Rho));
else
{static const _Ty _Cm = 22713.0 / 32768.0;
static const _Ty _Cl = (const _Ty)1.428606820309417232e-6L;
_Ty _Xn = _Xexp;
_CMPLX(_Ty) _W(_Rho == 0 ? -_CTR(_Ty)::_Infv(_Rho)
: _CTR(_Ty)::_Isinf(_Rho) ? _Rho
: _CTR(_Ty)::log(_Rho) + _Xn * _Cl + _Xn * _Cm,
_CTR(_Ty)::atan2(imag(_X), real(_X)));
return (_W); }}
// TEMPLATE FUNCTION log10
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl log10(const _CMPLX(_Ty)& _X)
{return (log(_X) * (_Ty)0.4342944819032518276511289L); }
// TEMPLATE FUNCTION norm
_TMPLT(_Ty) inline
_Ty __cdecl norm(const _CMPLX(_Ty)& _X)
{return (real(_X) * real(_X) + imag(_X) * imag(_X)); }
// TEMPLATE FUNCTION polar
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl polar(const _Ty& _Rho, const _Ty& _Theta)
{return (_CMPLX(_Ty)(_Rho * _CTR(_Ty)::cos(_Theta),
_Rho * _CTR(_Ty)::sin(_Theta))); }
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl polar(const _Ty& _Rho)
{return (polar(_Rho, (_Ty)0)); }
// TEMPLATE FUNCTION pow
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl pow(const _CMPLX(_Ty)& _X,
const _CMPLX(_Ty)& _Y)
{if (imag(_Y) == 0)
return (pow(_X, real(_Y)));
else if (imag(_X) == 0)
return (_CMPLX(_Ty)(pow(real(_X), _Y)));
else
return (exp(_Y * log(_X))); }
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl pow(const _CMPLX(_Ty)& _X, const _Ty& _Y)
{if (imag(_X) == 0)
return (_CMPLX(_Ty)(_CTR(_Ty)::pow(real(_X), _Y)));
else
return (exp(_Y * log(_X))); }
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl pow(const _CMPLX(_Ty)& _X, int _Y)
{if (imag(_X) == 0)
return (_CMPLX(_Ty)(_CTR(_Ty)::pow(real(_X), _Y)));
else
return (_Pow_int(_CMPLX(_Ty)(_X), _Y)); }
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl pow(const _Ty& _X, const _CMPLX(_Ty)& _Y)
{if (imag(_Y) == 0)
return (_CMPLX(_Ty)(_CTR(_Ty)::pow(_X, real(_Y))));
else
return (exp(_Y * _CTR(_Ty)::log(_X))); }
// TEMPLATE FUNCTION sin
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl sin(const _CMPLX(_Ty)& _X)
{return (_CMPLX(_Ty)(
_CTR(_Ty)::_Cosh(imag(_X), _CTR(_Ty)::sin(real(_X))),
_CTR(_Ty)::_Sinh(imag(_X), _CTR(_Ty)::cos(real(_X))))); }
// TEMPLATE FUNCTION sinh
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl sinh(const _CMPLX(_Ty)& _X)
{return (_CMPLX(_Ty)(
_CTR(_Ty)::_Sinh(real(_X), _CTR(_Ty)::cos(imag(_X))),
_CTR(_Ty)::_Cosh(real(_X), _CTR(_Ty)::sin(imag(_X))))); }
// TEMPLATE FUNCTION sqrt
_TMPLT(_Ty) inline
_CMPLX(_Ty) __cdecl sqrt(const _CMPLX(_Ty)& _X)
{int _Xexp;
_Ty _Rho = _Fabs(_X, &_Xexp);
if (_Xexp == 0)
return (_CMPLX(_Ty)(_Rho, _Rho));
else
{_Ty _Remag = _CTR(_Ty)::ldexp(real(_X) < 0
? - real(_X) : real(_X), -_Xexp);
_Rho = _CTR(_Ty)::ldexp(_CTR(_Ty)::sqrt(
2 * (_Remag + _Rho)), _Xexp / 2 - 1);
if (0 <= real(_X))
return (_CMPLX(_Ty)(_Rho, imag(_X) / (2 * _Rho)));
else if (imag(_X) < 0)
return (_CMPLX(_Ty)(-imag(_X) / (2 * _Rho), -_Rho));
else
return (_CMPLX(_Ty)(imag(_X) / (2 * _Rho),
_Rho)); }}
#ifdef _DLL
#pragma warning(disable:4231) /* the extern before template is a non-standard extension */
extern template _CRTIMP complex<float>& __cdecl operator+=(
complex<float>&, const complex<float>&);
extern template _CRTIMP complex<float>& __cdecl operator-=(
complex<float>&, const complex<float>&);
extern template _CRTIMP complex<float>& __cdecl operator*=(
complex<float>&, const complex<float>&);
extern template _CRTIMP complex<float>& __cdecl operator/=(
complex<float>&, const complex<float>&);
extern template _CRTIMP basic_istream<char, char_traits<char> >& __cdecl operator>>(
basic_istream<char, char_traits<char> >&, complex<float>&);
extern template _CRTIMP basic_ostream<char, char_traits<char> >& __cdecl operator<<(
basic_ostream<char, char_traits<char> >&, const complex<float>&);
extern template _CRTIMP basic_istream<wchar_t, char_traits<wchar_t> >& __cdecl operator>>(
basic_istream<wchar_t, char_traits<wchar_t> >&, complex<float>&);
extern template _CRTIMP basic_ostream<wchar_t, char_traits<wchar_t> >& __cdecl operator<<(
basic_ostream<wchar_t, char_traits<wchar_t> >&, const complex<float>&);
extern template _CRTIMP complex<double>& __cdecl operator+=(
complex<double>&, const complex<double>&);
extern template _CRTIMP complex<double>& __cdecl operator-=(
complex<double>&, const complex<double>&);
extern template _CRTIMP complex<double>& __cdecl operator*=(
complex<double>&, const complex<double>&);
extern template _CRTIMP complex<double>& __cdecl operator/=(
complex<double>&, const complex<double>&);
extern template _CRTIMP basic_istream<char, char_traits<char> >& __cdecl operator>>(
basic_istream<char, char_traits<char> >&, complex<double>&);
extern template _CRTIMP basic_ostream<char, char_traits<char> >& __cdecl operator<<(
basic_ostream<char, char_traits<char> >&, const complex<double>&);
extern template _CRTIMP basic_istream<wchar_t, char_traits<wchar_t> >& __cdecl operator>>(
basic_istream<wchar_t, char_traits<wchar_t> >&, complex<double>&);
extern template _CRTIMP basic_ostream<wchar_t, char_traits<wchar_t> >& __cdecl operator<<(
basic_ostream<wchar_t, char_traits<wchar_t> >&, const complex<double>&);
extern template _CRTIMP complex<long double>& __cdecl operator+=(
complex<long double>&, const complex<long double>&);
extern template _CRTIMP complex<long double>& __cdecl operator-=(
complex<long double>&, const complex<long double>&);
extern template _CRTIMP complex<long double>& __cdecl operator*=(
complex<long double>&, const complex<long double>&);
extern template _CRTIMP complex<long double>& __cdecl operator/=(
complex<long double>&, const complex<long double>&);
extern template _CRTIMP basic_istream<char, char_traits<char> >& __cdecl operator>>(
basic_istream<char, char_traits<char> >&, complex<long double>&);
extern template _CRTIMP basic_ostream<char, char_traits<char> >& __cdecl operator<<(
basic_ostream<char, char_traits<char> >&, const complex<long double>&);
extern template _CRTIMP basic_istream<wchar_t, char_traits<wchar_t> >& __cdecl operator>>(
basic_istream<wchar_t, char_traits<wchar_t> >&, complex<long double>&);
extern template _CRTIMP basic_ostream<wchar_t, char_traits<wchar_t> >& __cdecl operator<<(
basic_ostream<wchar_t, char_traits<wchar_t> >&, const complex<long double>&);
extern template _CRTIMP float __cdecl imag(const complex<float>&);
extern template _CRTIMP float __cdecl real(const complex<float>&);
extern template _CRTIMP float __cdecl _Fabs(const complex<float>&, int *);
extern template _CRTIMP complex<float> __cdecl operator+(
const complex<float>&, const complex<float>&);
extern template _CRTIMP complex<float> __cdecl operator+(
const complex<float>&, const float&);
extern template _CRTIMP complex<float> __cdecl operator+(
const float&, const complex<float>&);
extern template _CRTIMP complex<float> __cdecl operator-(
const complex<float>&, const complex<float>&);
extern template _CRTIMP complex<float> __cdecl operator-(
const complex<float>&, const float&);
extern template _CRTIMP complex<float> __cdecl operator-(
const float&, const complex<float>&);
extern template _CRTIMP complex<float> __cdecl operator*(
const complex<float>&, const complex<float>&);
extern template _CRTIMP complex<float> __cdecl operator*(
const complex<float>&, const float&);
extern template _CRTIMP complex<float> __cdecl operator*(
const float&, const complex<float>&);
extern template _CRTIMP complex<float> __cdecl operator/(
const complex<float>&, const complex<float>&);
extern template _CRTIMP complex<float> __cdecl operator/(
const complex<float>&, const float&);
extern template _CRTIMP complex<float> __cdecl operator/(
const float&, const complex<float>&);
extern template _CRTIMP complex<float> __cdecl operator+(
const complex<float>&);
extern template _CRTIMP complex<float> __cdecl operator-(
const complex<float>&);
extern template _CRTIMP bool __cdecl operator==(
const complex<float>&, const complex<float>&);
extern template _CRTIMP bool __cdecl operator==(
const complex<float>&, const float&);
extern template _CRTIMP bool __cdecl operator==(
const float&, const complex<float>&);
extern template _CRTIMP bool __cdecl operator!=(
const complex<float>&, const complex<float>&);
extern template _CRTIMP bool __cdecl operator!=(
const complex<float>&, const float&);
extern template _CRTIMP bool __cdecl operator!=(
const float&, const complex<float>&);
extern template _CRTIMP float __cdecl abs(const complex<float>&);
extern template _CRTIMP float __cdecl arg(const complex<float>&);
extern template _CRTIMP complex<float> __cdecl conj(const complex<float>&);
extern template _CRTIMP complex<float> __cdecl cos(const complex<float>&);
extern template _CRTIMP complex<float> __cdecl cosh(const complex<float>&);
extern template _CRTIMP complex<float> __cdecl exp(const complex<float>&);
extern template _CRTIMP complex<float> __cdecl log(const complex<float>&);
extern template _CRTIMP complex<float> __cdecl log10(const complex<float>&);
extern template _CRTIMP float __cdecl norm(const complex<float>&);
extern template _CRTIMP complex<float> __cdecl polar(const float&, const float&);
extern template _CRTIMP complex<float> __cdecl polar(const float&);
extern template _CRTIMP complex<float> __cdecl pow(
const complex<float>&, const complex<float>&);
extern template _CRTIMP complex<float> __cdecl pow(
const complex<float>&, const float&);
extern template _CRTIMP complex<float> __cdecl pow(
const complex<float>&, int);
extern template _CRTIMP complex<float> __cdecl pow(
const float&, const complex<float>&);
extern template _CRTIMP complex<float> __cdecl sin(const complex<float>&);
extern template _CRTIMP complex<float> __cdecl sinh(const complex<float>&);
extern template _CRTIMP complex<float> __cdecl sqrt(const complex<float>&);
extern template _CRTIMP double __cdecl imag(const complex<double>&);
extern template _CRTIMP double __cdecl real(const complex<double>&);
extern template _CRTIMP double __cdecl _Fabs(const complex<double>&, int *);
extern template _CRTIMP complex<double> __cdecl operator+(
const complex<double>&, const complex<double>&);
extern template _CRTIMP complex<double> __cdecl operator+(
const complex<double>&, const double&);
extern template _CRTIMP complex<double> __cdecl operator+(
const double&, const complex<double>&);
extern template _CRTIMP complex<double> __cdecl operator-(
const complex<double>&, const complex<double>&);
extern template _CRTIMP complex<double> __cdecl operator-(
const complex<double>&, const double&);
extern template _CRTIMP complex<double> __cdecl operator-(
const double&, const complex<double>&);
extern template _CRTIMP complex<double> __cdecl operator*(
const complex<double>&, const complex<double>&);
extern template _CRTIMP complex<double> __cdecl operator*(
const complex<double>&, const double&);
extern template _CRTIMP complex<double> __cdecl operator*(
const double&, const complex<double>&);
extern template _CRTIMP complex<double> __cdecl operator/(
const complex<double>&, const complex<double>&);
extern template _CRTIMP complex<double> __cdecl operator/(
const complex<double>&, const double&);
extern template _CRTIMP complex<double> __cdecl operator/(
const double&, const complex<double>&);
extern template _CRTIMP complex<double> __cdecl operator+(
const complex<double>&);
extern template _CRTIMP complex<double> __cdecl operator-(
const complex<double>&);
extern template _CRTIMP bool __cdecl operator==(
const complex<double>&, const complex<double>&);
extern template _CRTIMP bool __cdecl operator==(
const complex<double>&, const double&);
extern template _CRTIMP bool __cdecl operator==(
const double&, const complex<double>&);
extern template _CRTIMP bool __cdecl operator!=(
const complex<double>&, const complex<double>&);
extern template _CRTIMP bool __cdecl operator!=(
const complex<double>&, const double&);
extern template _CRTIMP bool __cdecl operator!=(
const double&, const complex<double>&);
extern template _CRTIMP double __cdecl abs(const complex<double>&);
extern template _CRTIMP double __cdecl arg(const complex<double>&);
extern template _CRTIMP complex<double> __cdecl conj(const complex<double>&);
extern template _CRTIMP complex<double> __cdecl cos(const complex<double>&);
extern template _CRTIMP complex<double> __cdecl cosh(const complex<double>&);
extern template _CRTIMP complex<double> __cdecl exp(const complex<double>&);
extern template _CRTIMP complex<double> __cdecl log(const complex<double>&);
extern template _CRTIMP complex<double> __cdecl log10(const complex<double>&);
extern template _CRTIMP double __cdecl norm(const complex<double>&);
extern template _CRTIMP complex<double> __cdecl polar(const double&, const double&);
extern template _CRTIMP complex<double> __cdecl polar(const double&);
extern template _CRTIMP complex<double> __cdecl pow(
const complex<double>&, const complex<double>&);
extern template _CRTIMP complex<double> __cdecl pow(
const complex<double>&, const double&);
extern template _CRTIMP complex<double> __cdecl pow(
const complex<double>&, int);
extern template _CRTIMP complex<double> __cdecl pow(
const double&, const complex<double>&);
extern template _CRTIMP complex<double> __cdecl sin(const complex<double>&);
extern template _CRTIMP complex<double> __cdecl sinh(const complex<double>&);
extern template _CRTIMP complex<double> __cdecl sqrt(const complex<double>&);
extern template _CRTIMP long double __cdecl imag(const complex<long double>&);
extern template _CRTIMP long double __cdecl real(const complex<long double>&);
extern template _CRTIMP long double __cdecl _Fabs(const complex<long double>&, int *);
extern template _CRTIMP complex<long double> __cdecl operator+(
const complex<long double>&, const complex<long double>&);
extern template _CRTIMP complex<long double> __cdecl operator+(
const complex<long double>&, const long double&);
extern template _CRTIMP complex<long double> __cdecl operator+(
const long double&, const complex<long double>&);
extern template _CRTIMP complex<long double> __cdecl operator-(
const complex<long double>&, const complex<long double>&);
extern template _CRTIMP complex<long double> __cdecl operator-(
const complex<long double>&, const long double&);
extern template _CRTIMP complex<long double> __cdecl operator-(
const long double&, const complex<long double>&);
extern template _CRTIMP complex<long double> __cdecl operator*(
const complex<long double>&, const complex<long double>&);
extern template _CRTIMP complex<long double> __cdecl operator*(
const complex<long double>&, const long double&);
extern template _CRTIMP complex<long double> __cdecl operator*(
const long double&, const complex<long double>&);
extern template _CRTIMP complex<long double> __cdecl operator/(
const complex<long double>&, const complex<long double>&);
extern template _CRTIMP complex<long double> __cdecl operator/(
const complex<long double>&, const long double&);
extern template _CRTIMP complex<long double> __cdecl operator/(
const long double&, const complex<long double>&);
extern template _CRTIMP complex<long double> __cdecl operator+(
const complex<long double>&);
extern template _CRTIMP complex<long double> __cdecl operator-(
const complex<long double>&);
extern template _CRTIMP bool __cdecl operator==(
const complex<long double>&, const complex<long double>&);
extern template _CRTIMP bool __cdecl operator==(
const complex<long double>&, const long double&);
extern template _CRTIMP bool __cdecl operator==(
const long double&, const complex<long double>&);
extern template _CRTIMP bool __cdecl operator!=(
const complex<long double>&, const complex<long double>&);
extern template _CRTIMP bool __cdecl operator!=(
const complex<long double>&, const long double&);
extern template _CRTIMP bool __cdecl operator!=(
const long double&, const complex<long double>&);
extern template _CRTIMP long double __cdecl abs(const complex<long double>&);
extern template _CRTIMP long double __cdecl arg(const complex<long double>&);
extern template _CRTIMP complex<long double> __cdecl conj(const complex<long double>&);
extern template _CRTIMP complex<long double> __cdecl cos(const complex<long double>&);
extern template _CRTIMP complex<long double> __cdecl cosh(const complex<long double>&);
extern template _CRTIMP complex<long double> __cdecl exp(const complex<long double>&);
extern template _CRTIMP complex<long double> __cdecl log(const complex<long double>&);
extern template _CRTIMP complex<long double> __cdecl log10(const complex<long double>&);
extern template _CRTIMP long double __cdecl norm(const complex<long double>&);
extern template _CRTIMP complex<long double> __cdecl polar(const long double&, const long double&);
extern template _CRTIMP complex<long double> __cdecl polar(const long double&);
extern template _CRTIMP complex<long double> __cdecl pow(
const complex<long double>&, const complex<long double>&);
extern template _CRTIMP complex<long double> __cdecl pow(
const complex<long double>&, const long double&);
extern template _CRTIMP complex<long double> __cdecl pow(
const complex<long double>&, int);
extern template _CRTIMP complex<long double> __cdecl pow(
const long double&, const complex<long double>&);
extern template _CRTIMP complex<long double> __cdecl sin(const complex<long double>&);
extern template _CRTIMP complex<long double> __cdecl sinh(const complex<long double>&);
extern template _CRTIMP complex<long double> __cdecl sqrt(const complex<long double>&);
#pragma warning(default:4231) /* restore previous warning */
#endif // _DLL
/*
* Copyright (c) 1996 by P.J. Plauger. ALL RIGHTS RESERVED.
* Consult your license regarding permissions and restrictions.
*/