xref: /llvm-project/clang/test/Headers/Inputs/include/complex (revision 56069b5c71ca78749aa983c1e9de6f1e4c049f4b)
1d999cbc9SJohannes Doerfert#pragma once
2d999cbc9SJohannes Doerfert
3d999cbc9SJohannes Doerfert#include <cmath>
4d999cbc9SJohannes Doerfert
5d999cbc9SJohannes Doerfert#define INFINITY (__builtin_inff())
6*56069b5cSJohannes Doerfert#define NAN (__builtin_nanf (""))
7d999cbc9SJohannes Doerfert
8d999cbc9SJohannes Doerfertnamespace std {
9d999cbc9SJohannes Doerfert
10d999cbc9SJohannes Doerfert// Taken from libc++
11d999cbc9SJohannes Doerferttemplate <class _Tp>
12d999cbc9SJohannes Doerfertclass complex {
13d999cbc9SJohannes Doerfertpublic:
14d999cbc9SJohannes Doerfert  typedef _Tp value_type;
15d999cbc9SJohannes Doerfert
16d999cbc9SJohannes Doerfertprivate:
17d999cbc9SJohannes Doerfert  value_type __re_;
18d999cbc9SJohannes Doerfert  value_type __im_;
19d999cbc9SJohannes Doerfert
20d999cbc9SJohannes Doerfertpublic:
21d999cbc9SJohannes Doerfert  complex(const value_type &__re = value_type(), const value_type &__im = value_type())
22d999cbc9SJohannes Doerfert      : __re_(__re), __im_(__im) {}
23d999cbc9SJohannes Doerfert  template <class _Xp>
24d999cbc9SJohannes Doerfert  complex(const complex<_Xp> &__c)
25d999cbc9SJohannes Doerfert      : __re_(__c.real()), __im_(__c.imag()) {}
26d999cbc9SJohannes Doerfert
27d999cbc9SJohannes Doerfert  value_type real() const { return __re_; }
28d999cbc9SJohannes Doerfert  value_type imag() const { return __im_; }
29d999cbc9SJohannes Doerfert
30d999cbc9SJohannes Doerfert  void real(value_type __re) { __re_ = __re; }
31d999cbc9SJohannes Doerfert  void imag(value_type __im) { __im_ = __im; }
32d999cbc9SJohannes Doerfert
33d999cbc9SJohannes Doerfert  complex &operator=(const value_type &__re) {
34d999cbc9SJohannes Doerfert    __re_ = __re;
35d999cbc9SJohannes Doerfert    __im_ = value_type();
36d999cbc9SJohannes Doerfert    return *this;
37d999cbc9SJohannes Doerfert  }
38d999cbc9SJohannes Doerfert  complex &operator+=(const value_type &__re) {
39d999cbc9SJohannes Doerfert    __re_ += __re;
40d999cbc9SJohannes Doerfert    return *this;
41d999cbc9SJohannes Doerfert  }
42d999cbc9SJohannes Doerfert  complex &operator-=(const value_type &__re) {
43d999cbc9SJohannes Doerfert    __re_ -= __re;
44d999cbc9SJohannes Doerfert    return *this;
45d999cbc9SJohannes Doerfert  }
46d999cbc9SJohannes Doerfert  complex &operator*=(const value_type &__re) {
47d999cbc9SJohannes Doerfert    __re_ *= __re;
48d999cbc9SJohannes Doerfert    __im_ *= __re;
49d999cbc9SJohannes Doerfert    return *this;
50d999cbc9SJohannes Doerfert  }
51d999cbc9SJohannes Doerfert  complex &operator/=(const value_type &__re) {
52d999cbc9SJohannes Doerfert    __re_ /= __re;
53d999cbc9SJohannes Doerfert    __im_ /= __re;
54d999cbc9SJohannes Doerfert    return *this;
55d999cbc9SJohannes Doerfert  }
56d999cbc9SJohannes Doerfert
57d999cbc9SJohannes Doerfert  template <class _Xp>
58d999cbc9SJohannes Doerfert  complex &operator=(const complex<_Xp> &__c) {
59d999cbc9SJohannes Doerfert    __re_ = __c.real();
60d999cbc9SJohannes Doerfert    __im_ = __c.imag();
61d999cbc9SJohannes Doerfert    return *this;
62d999cbc9SJohannes Doerfert  }
63d999cbc9SJohannes Doerfert  template <class _Xp>
64d999cbc9SJohannes Doerfert  complex &operator+=(const complex<_Xp> &__c) {
65d999cbc9SJohannes Doerfert    __re_ += __c.real();
66d999cbc9SJohannes Doerfert    __im_ += __c.imag();
67d999cbc9SJohannes Doerfert    return *this;
68d999cbc9SJohannes Doerfert  }
69d999cbc9SJohannes Doerfert  template <class _Xp>
70d999cbc9SJohannes Doerfert  complex &operator-=(const complex<_Xp> &__c) {
71d999cbc9SJohannes Doerfert    __re_ -= __c.real();
72d999cbc9SJohannes Doerfert    __im_ -= __c.imag();
73d999cbc9SJohannes Doerfert    return *this;
74d999cbc9SJohannes Doerfert  }
75d999cbc9SJohannes Doerfert  template <class _Xp>
76d999cbc9SJohannes Doerfert  complex &operator*=(const complex<_Xp> &__c) {
77d999cbc9SJohannes Doerfert    *this = *this * complex(__c.real(), __c.imag());
78d999cbc9SJohannes Doerfert    return *this;
79d999cbc9SJohannes Doerfert  }
80d999cbc9SJohannes Doerfert  template <class _Xp>
81d999cbc9SJohannes Doerfert  complex &operator/=(const complex<_Xp> &__c) {
82d999cbc9SJohannes Doerfert    *this = *this / complex(__c.real(), __c.imag());
83d999cbc9SJohannes Doerfert    return *this;
84d999cbc9SJohannes Doerfert  }
85d999cbc9SJohannes Doerfert};
86d999cbc9SJohannes Doerfert
87d999cbc9SJohannes Doerferttemplate <class _Tp>
88d999cbc9SJohannes Doerfertinline complex<_Tp>
89d999cbc9SJohannes Doerfertoperator+(const complex<_Tp> &__x, const complex<_Tp> &__y) {
90d999cbc9SJohannes Doerfert  complex<_Tp> __t(__x);
91d999cbc9SJohannes Doerfert  __t += __y;
92d999cbc9SJohannes Doerfert  return __t;
93d999cbc9SJohannes Doerfert}
94d999cbc9SJohannes Doerfert
95d999cbc9SJohannes Doerferttemplate <class _Tp>
96d999cbc9SJohannes Doerfertinline complex<_Tp>
97d999cbc9SJohannes Doerfertoperator+(const complex<_Tp> &__x, const _Tp &__y) {
98d999cbc9SJohannes Doerfert  complex<_Tp> __t(__x);
99d999cbc9SJohannes Doerfert  __t += __y;
100d999cbc9SJohannes Doerfert  return __t;
101d999cbc9SJohannes Doerfert}
102d999cbc9SJohannes Doerfert
103d999cbc9SJohannes Doerferttemplate <class _Tp>
104d999cbc9SJohannes Doerfertinline complex<_Tp>
105d999cbc9SJohannes Doerfertoperator+(const _Tp &__x, const complex<_Tp> &__y) {
106d999cbc9SJohannes Doerfert  complex<_Tp> __t(__y);
107d999cbc9SJohannes Doerfert  __t += __x;
108d999cbc9SJohannes Doerfert  return __t;
109d999cbc9SJohannes Doerfert}
110d999cbc9SJohannes Doerfert
111d999cbc9SJohannes Doerferttemplate <class _Tp>
112d999cbc9SJohannes Doerfertinline complex<_Tp>
113d999cbc9SJohannes Doerfertoperator-(const complex<_Tp> &__x, const complex<_Tp> &__y) {
114d999cbc9SJohannes Doerfert  complex<_Tp> __t(__x);
115d999cbc9SJohannes Doerfert  __t -= __y;
116d999cbc9SJohannes Doerfert  return __t;
117d999cbc9SJohannes Doerfert}
118d999cbc9SJohannes Doerfert
119d999cbc9SJohannes Doerferttemplate <class _Tp>
120d999cbc9SJohannes Doerfertinline complex<_Tp>
121d999cbc9SJohannes Doerfertoperator-(const complex<_Tp> &__x, const _Tp &__y) {
122d999cbc9SJohannes Doerfert  complex<_Tp> __t(__x);
123d999cbc9SJohannes Doerfert  __t -= __y;
124d999cbc9SJohannes Doerfert  return __t;
125d999cbc9SJohannes Doerfert}
126d999cbc9SJohannes Doerfert
127d999cbc9SJohannes Doerferttemplate <class _Tp>
128d999cbc9SJohannes Doerfertinline complex<_Tp>
129d999cbc9SJohannes Doerfertoperator-(const _Tp &__x, const complex<_Tp> &__y) {
130d999cbc9SJohannes Doerfert  complex<_Tp> __t(-__y);
131d999cbc9SJohannes Doerfert  __t += __x;
132d999cbc9SJohannes Doerfert  return __t;
133d999cbc9SJohannes Doerfert}
134d999cbc9SJohannes Doerfert
135d999cbc9SJohannes Doerferttemplate <class _Tp>
136d999cbc9SJohannes Doerfertcomplex<_Tp>
137d999cbc9SJohannes Doerfertoperator*(const complex<_Tp> &__z, const complex<_Tp> &__w) {
138d999cbc9SJohannes Doerfert  _Tp __a = __z.real();
139d999cbc9SJohannes Doerfert  _Tp __b = __z.imag();
140d999cbc9SJohannes Doerfert  _Tp __c = __w.real();
141d999cbc9SJohannes Doerfert  _Tp __d = __w.imag();
142d999cbc9SJohannes Doerfert  _Tp __ac = __a * __c;
143d999cbc9SJohannes Doerfert  _Tp __bd = __b * __d;
144d999cbc9SJohannes Doerfert  _Tp __ad = __a * __d;
145d999cbc9SJohannes Doerfert  _Tp __bc = __b * __c;
146d999cbc9SJohannes Doerfert  _Tp __x = __ac - __bd;
147d999cbc9SJohannes Doerfert  _Tp __y = __ad + __bc;
148d999cbc9SJohannes Doerfert  if (std::isnan(__x) && std::isnan(__y)) {
149d999cbc9SJohannes Doerfert    bool __recalc = false;
150d999cbc9SJohannes Doerfert    if (std::isinf(__a) || std::isinf(__b)) {
151d999cbc9SJohannes Doerfert      __a = copysign(std::isinf(__a) ? _Tp(1) : _Tp(0), __a);
152d999cbc9SJohannes Doerfert      __b = copysign(std::isinf(__b) ? _Tp(1) : _Tp(0), __b);
153d999cbc9SJohannes Doerfert      if (std::isnan(__c))
154d999cbc9SJohannes Doerfert        __c = copysign(_Tp(0), __c);
155d999cbc9SJohannes Doerfert      if (std::isnan(__d))
156d999cbc9SJohannes Doerfert        __d = copysign(_Tp(0), __d);
157d999cbc9SJohannes Doerfert      __recalc = true;
158d999cbc9SJohannes Doerfert    }
159d999cbc9SJohannes Doerfert    if (std::isinf(__c) || std::isinf(__d)) {
160d999cbc9SJohannes Doerfert      __c = copysign(std::isinf(__c) ? _Tp(1) : _Tp(0), __c);
161d999cbc9SJohannes Doerfert      __d = copysign(std::isinf(__d) ? _Tp(1) : _Tp(0), __d);
162d999cbc9SJohannes Doerfert      if (std::isnan(__a))
163d999cbc9SJohannes Doerfert        __a = copysign(_Tp(0), __a);
164d999cbc9SJohannes Doerfert      if (std::isnan(__b))
165d999cbc9SJohannes Doerfert        __b = copysign(_Tp(0), __b);
166d999cbc9SJohannes Doerfert      __recalc = true;
167d999cbc9SJohannes Doerfert    }
168d999cbc9SJohannes Doerfert    if (!__recalc && (std::isinf(__ac) || std::isinf(__bd) ||
169d999cbc9SJohannes Doerfert                      std::isinf(__ad) || std::isinf(__bc))) {
170d999cbc9SJohannes Doerfert      if (std::isnan(__a))
171d999cbc9SJohannes Doerfert        __a = copysign(_Tp(0), __a);
172d999cbc9SJohannes Doerfert      if (std::isnan(__b))
173d999cbc9SJohannes Doerfert        __b = copysign(_Tp(0), __b);
174d999cbc9SJohannes Doerfert      if (std::isnan(__c))
175d999cbc9SJohannes Doerfert        __c = copysign(_Tp(0), __c);
176d999cbc9SJohannes Doerfert      if (std::isnan(__d))
177d999cbc9SJohannes Doerfert        __d = copysign(_Tp(0), __d);
178d999cbc9SJohannes Doerfert      __recalc = true;
179d999cbc9SJohannes Doerfert    }
180d999cbc9SJohannes Doerfert    if (__recalc) {
181d999cbc9SJohannes Doerfert      __x = _Tp(INFINITY) * (__a * __c - __b * __d);
182d999cbc9SJohannes Doerfert      __y = _Tp(INFINITY) * (__a * __d + __b * __c);
183d999cbc9SJohannes Doerfert    }
184d999cbc9SJohannes Doerfert  }
185d999cbc9SJohannes Doerfert  return complex<_Tp>(__x, __y);
186d999cbc9SJohannes Doerfert}
187d999cbc9SJohannes Doerfert
188d999cbc9SJohannes Doerferttemplate <class _Tp>
189d999cbc9SJohannes Doerfertinline complex<_Tp>
190d999cbc9SJohannes Doerfertoperator*(const complex<_Tp> &__x, const _Tp &__y) {
191d999cbc9SJohannes Doerfert  complex<_Tp> __t(__x);
192d999cbc9SJohannes Doerfert  __t *= __y;
193d999cbc9SJohannes Doerfert  return __t;
194d999cbc9SJohannes Doerfert}
195d999cbc9SJohannes Doerfert
196d999cbc9SJohannes Doerferttemplate <class _Tp>
197d999cbc9SJohannes Doerfertinline complex<_Tp>
198d999cbc9SJohannes Doerfertoperator*(const _Tp &__x, const complex<_Tp> &__y) {
199d999cbc9SJohannes Doerfert  complex<_Tp> __t(__y);
200d999cbc9SJohannes Doerfert  __t *= __x;
201d999cbc9SJohannes Doerfert  return __t;
202d999cbc9SJohannes Doerfert}
203d999cbc9SJohannes Doerfert
204d999cbc9SJohannes Doerferttemplate <class _Tp>
205d999cbc9SJohannes Doerfertcomplex<_Tp>
206d999cbc9SJohannes Doerfertoperator/(const complex<_Tp> &__z, const complex<_Tp> &__w) {
207d999cbc9SJohannes Doerfert  int __ilogbw = 0;
208d999cbc9SJohannes Doerfert  _Tp __a = __z.real();
209d999cbc9SJohannes Doerfert  _Tp __b = __z.imag();
210d999cbc9SJohannes Doerfert  _Tp __c = __w.real();
211d999cbc9SJohannes Doerfert  _Tp __d = __w.imag();
212d999cbc9SJohannes Doerfert  _Tp __logbw = logb(fmax(fabs(__c), fabs(__d)));
213d999cbc9SJohannes Doerfert  if (std::isfinite(__logbw)) {
214d999cbc9SJohannes Doerfert    __ilogbw = static_cast<int>(__logbw);
215d999cbc9SJohannes Doerfert    __c = scalbn(__c, -__ilogbw);
216d999cbc9SJohannes Doerfert    __d = scalbn(__d, -__ilogbw);
217d999cbc9SJohannes Doerfert  }
218d999cbc9SJohannes Doerfert  _Tp __denom = __c * __c + __d * __d;
219d999cbc9SJohannes Doerfert  _Tp __x = scalbn((__a * __c + __b * __d) / __denom, -__ilogbw);
220d999cbc9SJohannes Doerfert  _Tp __y = scalbn((__b * __c - __a * __d) / __denom, -__ilogbw);
221d999cbc9SJohannes Doerfert  if (std::isnan(__x) && std::isnan(__y)) {
222d999cbc9SJohannes Doerfert    if ((__denom == _Tp(0)) && (!std::isnan(__a) || !std::isnan(__b))) {
223d999cbc9SJohannes Doerfert      __x = copysign(_Tp(INFINITY), __c) * __a;
224d999cbc9SJohannes Doerfert      __y = copysign(_Tp(INFINITY), __c) * __b;
225d999cbc9SJohannes Doerfert    } else if ((std::isinf(__a) || std::isinf(__b)) && std::isfinite(__c) && std::isfinite(__d)) {
226d999cbc9SJohannes Doerfert      __a = copysign(std::isinf(__a) ? _Tp(1) : _Tp(0), __a);
227d999cbc9SJohannes Doerfert      __b = copysign(std::isinf(__b) ? _Tp(1) : _Tp(0), __b);
228d999cbc9SJohannes Doerfert      __x = _Tp(INFINITY) * (__a * __c + __b * __d);
229d999cbc9SJohannes Doerfert      __y = _Tp(INFINITY) * (__b * __c - __a * __d);
230d999cbc9SJohannes Doerfert    } else if (std::isinf(__logbw) && __logbw > _Tp(0) && std::isfinite(__a) && std::isfinite(__b)) {
231d999cbc9SJohannes Doerfert      __c = copysign(std::isinf(__c) ? _Tp(1) : _Tp(0), __c);
232d999cbc9SJohannes Doerfert      __d = copysign(std::isinf(__d) ? _Tp(1) : _Tp(0), __d);
233d999cbc9SJohannes Doerfert      __x = _Tp(0) * (__a * __c + __b * __d);
234d999cbc9SJohannes Doerfert      __y = _Tp(0) * (__b * __c - __a * __d);
235d999cbc9SJohannes Doerfert    }
236d999cbc9SJohannes Doerfert  }
237d999cbc9SJohannes Doerfert  return complex<_Tp>(__x, __y);
238d999cbc9SJohannes Doerfert}
239d999cbc9SJohannes Doerfert
240d999cbc9SJohannes Doerferttemplate <class _Tp>
241d999cbc9SJohannes Doerfertinline complex<_Tp>
242d999cbc9SJohannes Doerfertoperator/(const complex<_Tp> &__x, const _Tp &__y) {
243d999cbc9SJohannes Doerfert  return complex<_Tp>(__x.real() / __y, __x.imag() / __y);
244d999cbc9SJohannes Doerfert}
245d999cbc9SJohannes Doerfert
246d999cbc9SJohannes Doerferttemplate <class _Tp>
247d999cbc9SJohannes Doerfertinline complex<_Tp>
248d999cbc9SJohannes Doerfertoperator/(const _Tp &__x, const complex<_Tp> &__y) {
249d999cbc9SJohannes Doerfert  complex<_Tp> __t(__x);
250d999cbc9SJohannes Doerfert  __t /= __y;
251d999cbc9SJohannes Doerfert  return __t;
252d999cbc9SJohannes Doerfert}
253d999cbc9SJohannes Doerfert
254d999cbc9SJohannes Doerferttemplate <class _Tp>
255d999cbc9SJohannes Doerfertinline complex<_Tp>
256d999cbc9SJohannes Doerfertoperator+(const complex<_Tp> &__x) {
257d999cbc9SJohannes Doerfert  return __x;
258d999cbc9SJohannes Doerfert}
259d999cbc9SJohannes Doerfert
260d999cbc9SJohannes Doerferttemplate <class _Tp>
261d999cbc9SJohannes Doerfertinline complex<_Tp>
262d999cbc9SJohannes Doerfertoperator-(const complex<_Tp> &__x) {
263d999cbc9SJohannes Doerfert  return complex<_Tp>(-__x.real(), -__x.imag());
264d999cbc9SJohannes Doerfert}
265d999cbc9SJohannes Doerfert
266d999cbc9SJohannes Doerferttemplate <class _Tp>
267d999cbc9SJohannes Doerfertinline bool
268d999cbc9SJohannes Doerfertoperator==(const complex<_Tp> &__x, const complex<_Tp> &__y) {
269d999cbc9SJohannes Doerfert  return __x.real() == __y.real() && __x.imag() == __y.imag();
270d999cbc9SJohannes Doerfert}
271d999cbc9SJohannes Doerfert
272d999cbc9SJohannes Doerferttemplate <class _Tp>
273d999cbc9SJohannes Doerfertinline bool
274d999cbc9SJohannes Doerfertoperator==(const complex<_Tp> &__x, const _Tp &__y) {
275d999cbc9SJohannes Doerfert  return __x.real() == __y && __x.imag() == 0;
276d999cbc9SJohannes Doerfert}
277d999cbc9SJohannes Doerfert
278d999cbc9SJohannes Doerferttemplate <class _Tp>
279d999cbc9SJohannes Doerfertinline bool
280d999cbc9SJohannes Doerfertoperator==(const _Tp &__x, const complex<_Tp> &__y) {
281d999cbc9SJohannes Doerfert  return __x == __y.real() && 0 == __y.imag();
282d999cbc9SJohannes Doerfert}
283d999cbc9SJohannes Doerfert
284d999cbc9SJohannes Doerferttemplate <class _Tp>
285d999cbc9SJohannes Doerfertinline bool
286d999cbc9SJohannes Doerfertoperator!=(const complex<_Tp> &__x, const complex<_Tp> &__y) {
287d999cbc9SJohannes Doerfert  return !(__x == __y);
288d999cbc9SJohannes Doerfert}
289d999cbc9SJohannes Doerfert
290d999cbc9SJohannes Doerferttemplate <class _Tp>
291d999cbc9SJohannes Doerfertinline bool
292d999cbc9SJohannes Doerfertoperator!=(const complex<_Tp> &__x, const _Tp &__y) {
293d999cbc9SJohannes Doerfert  return !(__x == __y);
294d999cbc9SJohannes Doerfert}
295d999cbc9SJohannes Doerfert
296d999cbc9SJohannes Doerferttemplate <class _Tp>
297d999cbc9SJohannes Doerfertinline bool
298d999cbc9SJohannes Doerfertoperator!=(const _Tp &__x, const complex<_Tp> &__y) {
299d999cbc9SJohannes Doerfert  return !(__x == __y);
300d999cbc9SJohannes Doerfert}
301d999cbc9SJohannes Doerfert
302*56069b5cSJohannes Doerferttemplate <class _Tp> _Tp abs(const std::complex<_Tp> &__c);
303*56069b5cSJohannes Doerfert
304*56069b5cSJohannes Doerfert// arg
305*56069b5cSJohannes Doerfert
306*56069b5cSJohannes Doerferttemplate <class _Tp> _Tp arg(const std::complex<_Tp> &__c);
307*56069b5cSJohannes Doerfert
308*56069b5cSJohannes Doerfert// norm
309*56069b5cSJohannes Doerfert
310*56069b5cSJohannes Doerferttemplate <class _Tp> _Tp norm(const std::complex<_Tp> &__c);
311*56069b5cSJohannes Doerfert
312*56069b5cSJohannes Doerfert// conj
313*56069b5cSJohannes Doerfert
314*56069b5cSJohannes Doerferttemplate <class _Tp> std::complex<_Tp> conj(const std::complex<_Tp> &__c);
315*56069b5cSJohannes Doerfert
316*56069b5cSJohannes Doerfert// proj
317*56069b5cSJohannes Doerfert
318*56069b5cSJohannes Doerferttemplate <class _Tp> std::complex<_Tp> proj(const std::complex<_Tp> &__c);
319*56069b5cSJohannes Doerfert
320*56069b5cSJohannes Doerfert// polar
321*56069b5cSJohannes Doerfert
322*56069b5cSJohannes Doerferttemplate <class _Tp>
323*56069b5cSJohannes Doerfertcomplex<_Tp> polar(const _Tp &__rho, const _Tp &__theta = _Tp());
324*56069b5cSJohannes Doerfert
325*56069b5cSJohannes Doerfert// log
326*56069b5cSJohannes Doerfert
327*56069b5cSJohannes Doerferttemplate <class _Tp> std::complex<_Tp> log(const std::complex<_Tp> &__x);
328*56069b5cSJohannes Doerfert
329*56069b5cSJohannes Doerfert// log10
330*56069b5cSJohannes Doerfert
331*56069b5cSJohannes Doerferttemplate <class _Tp> std::complex<_Tp> log10(const std::complex<_Tp> &__x);
332*56069b5cSJohannes Doerfert
333*56069b5cSJohannes Doerfert// sqrt
334*56069b5cSJohannes Doerfert
335*56069b5cSJohannes Doerferttemplate <class _Tp>
336*56069b5cSJohannes Doerfertstd::complex<_Tp> sqrt(const std::complex<_Tp> &__x);
337*56069b5cSJohannes Doerfert
338*56069b5cSJohannes Doerfert// exp
339*56069b5cSJohannes Doerfert
340*56069b5cSJohannes Doerferttemplate <class _Tp>
341*56069b5cSJohannes Doerfertstd::complex<_Tp> exp(const std::complex<_Tp> &__x);
342*56069b5cSJohannes Doerfert
343*56069b5cSJohannes Doerfert// pow
344*56069b5cSJohannes Doerfert
345*56069b5cSJohannes Doerferttemplate <class _Tp>
346*56069b5cSJohannes Doerfertstd::complex<_Tp> pow(const std::complex<_Tp> &__x,
347*56069b5cSJohannes Doerfert                      const std::complex<_Tp> &__y);
348*56069b5cSJohannes Doerfert
349*56069b5cSJohannes Doerfert// __sqr, computes pow(x, 2)
350*56069b5cSJohannes Doerfert
351*56069b5cSJohannes Doerferttemplate <class _Tp> std::complex<_Tp> __sqr(const std::complex<_Tp> &__x);
352*56069b5cSJohannes Doerfert
353*56069b5cSJohannes Doerfert// asinh
354*56069b5cSJohannes Doerfert
355*56069b5cSJohannes Doerferttemplate <class _Tp>
356*56069b5cSJohannes Doerfertstd::complex<_Tp> asinh(const std::complex<_Tp> &__x);
357*56069b5cSJohannes Doerfert
358*56069b5cSJohannes Doerfert// acosh
359*56069b5cSJohannes Doerfert
360*56069b5cSJohannes Doerferttemplate <class _Tp>
361*56069b5cSJohannes Doerfertstd::complex<_Tp> acosh(const std::complex<_Tp> &__x);
362*56069b5cSJohannes Doerfert
363*56069b5cSJohannes Doerfert// atanh
364*56069b5cSJohannes Doerfert
365*56069b5cSJohannes Doerferttemplate <class _Tp>
366*56069b5cSJohannes Doerfertstd::complex<_Tp> atanh(const std::complex<_Tp> &__x);
367*56069b5cSJohannes Doerfert
368*56069b5cSJohannes Doerfert// sinh
369*56069b5cSJohannes Doerfert
370*56069b5cSJohannes Doerferttemplate <class _Tp>
371*56069b5cSJohannes Doerfertstd::complex<_Tp> sinh(const std::complex<_Tp> &__x);
372*56069b5cSJohannes Doerfert
373*56069b5cSJohannes Doerfert// cosh
374*56069b5cSJohannes Doerfert
375*56069b5cSJohannes Doerferttemplate <class _Tp>
376*56069b5cSJohannes Doerfertstd::complex<_Tp> cosh(const std::complex<_Tp> &__x);
377*56069b5cSJohannes Doerfert
378*56069b5cSJohannes Doerfert// tanh
379*56069b5cSJohannes Doerfert
380*56069b5cSJohannes Doerferttemplate <class _Tp>
381*56069b5cSJohannes Doerfertstd::complex<_Tp> tanh(const std::complex<_Tp> &__x);
382*56069b5cSJohannes Doerfert
383*56069b5cSJohannes Doerfert// asin
384*56069b5cSJohannes Doerfert
385*56069b5cSJohannes Doerferttemplate <class _Tp>
386*56069b5cSJohannes Doerfertstd::complex<_Tp> asin(const std::complex<_Tp> &__x);
387*56069b5cSJohannes Doerfert
388*56069b5cSJohannes Doerfert// acos
389*56069b5cSJohannes Doerfert
390*56069b5cSJohannes Doerferttemplate <class _Tp>
391*56069b5cSJohannes Doerfertstd::complex<_Tp> acos(const std::complex<_Tp> &__x);
392*56069b5cSJohannes Doerfert
393*56069b5cSJohannes Doerfert// atan
394*56069b5cSJohannes Doerfert
395*56069b5cSJohannes Doerferttemplate <class _Tp>
396*56069b5cSJohannes Doerfertstd::complex<_Tp> atan(const std::complex<_Tp> &__x);
397*56069b5cSJohannes Doerfert
398*56069b5cSJohannes Doerfert// sin
399*56069b5cSJohannes Doerfert
400*56069b5cSJohannes Doerferttemplate <class _Tp>
401*56069b5cSJohannes Doerfertstd::complex<_Tp> sin(const std::complex<_Tp> &__x);
402*56069b5cSJohannes Doerfert
403*56069b5cSJohannes Doerfert// cos
404*56069b5cSJohannes Doerfert
405*56069b5cSJohannes Doerferttemplate <class _Tp> std::complex<_Tp> cos(const std::complex<_Tp> &__x);
406*56069b5cSJohannes Doerfert
407*56069b5cSJohannes Doerfert// tan
408*56069b5cSJohannes Doerfert
409*56069b5cSJohannes Doerferttemplate <class _Tp>
410*56069b5cSJohannes Doerfertstd::complex<_Tp> tan(const std::complex<_Tp> &__x);
411*56069b5cSJohannes Doerfert
412d999cbc9SJohannes Doerfert} // namespace std
413