std::complex(3) C++ Standard Libary std::complex(3) NAME std::complex - std::complex Synopsis Defined in header <complex> template< class T > (1) class complex; template<> class complex<float>; (2) (until C++23) template<> class complex<double>; (3) (until C++23) template<> class complex<long double>; (4) (until C++23) Specializations of std::complex for cv-unqualified standard (until C++23) floating-point types are TriviallyCopyable (since C++23) LiteralTypes for representing and manipulating complex number. Template parameters the type of the real and imaginary parts. The behavior is unspeci- fied (and may T - fail to compile) if T is not a cv-unqualified standard (until C++23) floating-point type and undefined if T is not Numeric- Type. Member types Member type Definition value_type T Member functions constructor constructs a complex number (public member function) operator= assigns the contents (public member function) real accesses the real part of the complex number (public member function) imag accesses the imaginary part of the complex number (public member function) operator+= operator-= compound assignment of two complex numbers or a complex and a scalar operator*= (public member function) operator/= Non-member functions operator+ applies unary operators to complex numbers operator- (function template) operator+ performs complex number arithmetic on two complex values or a operator- complex and a scalar operator* (function template) operator/ operator== compares two complex numbers or a complex and a scalar operator!= (function template) (removed in C++20) operator<< serializes and deserializes a complex number operator>> (function template) get(std::complex) obtains a reference to real or imaginary part from a (C++26) std::complex (function template) real returns the real part (function template) imag returns the imaginary part (function template) abs(std::complex) returns the magnitude of a complex number (function template) arg returns the phase angle (function template) norm returns the squared magnitude (function template) conj returns the complex conjugate (function template) proj returns the projection onto the Riemann sphere (C++11) (function template) polar constructs a complex number from magnitude and phase angle (function template) Exponential functions exp(std::complex) complex base e exponential (function template) complex natural logarithm with the branch cuts along the log(std::complex) negative real axis (function template) complex common logarithm with the branch cuts along the negative log10(std::complex) real axis (function template) Power functions pow(std::complex) complex power, one or both arguments may be a com- plex number (function template) sqrt(std::complex) complex square root in the range of the right half- plane (function template) Trigonometric functions sin(std::complex) computes sine of a complex number (\({\small\sin{z}}\)sin(z)) (function template) cos(std::complex) computes cosine of a complex number (\({\small\cos{z}}\)cos(z)) (function template) tan(std::complex) computes tangent of a complex number (\({\small\tan{z}}\)tan(z)) (function template) asin(std::complex) computes arc sine of a complex number (C++11) (\({\small\arcsin{z}}\)arcsin(z)) (function template) acos(std::complex) computes arc cosine of a complex number (C++11) (\({\small\arccos{z}}\)arccos(z)) (function template) atan(std::complex) computes arc tangent of a complex number (C++11) (\({\small\arctan{z}}\)arctan(z)) (function template) Hyperbolic functions computes hyperbolic sine of a complex number sinh(std::complex) (\({\small\sinh{z}}\)sinh(z)) (function template) computes hyperbolic cosine of a complex number cosh(std::complex) (\({\small\cosh{z}}\)cosh(z)) (function template) computes hyperbolic tangent of a complex number tanh(std::complex) (\({\small\tanh{z}}\)tanh(z)) (function template) asinh(std::complex) computes area hyperbolic sine of a complex number (C++11) (\({\small\operatorname{arsinh}{z}}\)arsinh(z)) (function template) acosh(std::complex) computes area hyperbolic cosine of a complex number (C++11) (\({\small\operatorname{arcosh}{z}}\)arcosh(z)) (function template) atanh(std::complex) computes area hyperbolic tangent of a complex number (C++11) (\({\small\operatorname{artanh}{z}}\)artanh(z)) (function template) Helper types std::tuple_size<std::complex> obtains the number of components of a std::complex (C++26) (class template specialization) std::tuple_element<std::complex> obtains the underlying real and imagi- nary number (C++26) type of a std::complex (class template specialization) Array-oriented access For any object z of type std::complex<T>, reinter- pret_cast<T(&)[2]>(z)[0] is the real part of z and reinterpret_cast<T(&)[2]>(z)[1] is the imaginary part of z. For any pointer to an element of an array of std::complex<T> named p and any valid array index i, reinterpret_cast<T*>(p)[2 * i] is the real part of the complex number p[i], and reinterpret_cast<T*>(p)[2 * i + 1] is the imaginary part of the complex number p[i]. The intent of this requirement is to preserve binary compatibility be- tween the C++ library complex number types and the C language complex number types (and arrays thereof), which have an identical object representation requirement. Implementation notes In order to satisfy the requirements of array-oriented access, an imple- mentation is constrained to store the real and imaginary parts of a std::complex spe- cialization in separate and adjacent memory locations. Possible declarations for its non-static data members include: * an array of type value_type[2], with the first element holding the real part and the second element holding the imaginary part (e.g. Microsoft Visual Studio); * a single member of type value_type _Complex (encapsulating the cor- responding C language complex number type) (e.g. GNU libstdc++); * two members of type value_type, with the same member access, holding the real and the imaginary parts respectively (e.g. LLVM libc++). An implementation cannot declare additional non-static data members that would occupy storage disjoint from the real and imaginary parts, and must en- sure that the class template specialization does not contain any padding bit. The im- plementation must also ensure that optimizations to array access account for the pos- sibility that a pointer to value_type may be aliasing a std::complex specialization or array thereof. Literals Defined in inline namespace std::literals::complex_literals operator""if operator""i a std::complex literal representing purely imaginary num- ber operator""il (function) (C++14) Notes Feature-test macro Value Std Feature 201711L (C++20) Constexpr simple complex mathematical __cpp_lib_constexpr_complex functions in <complex> 202306L (C++26) More constexpr for <complex> Example // Run this code #include <cmath> #include <complex> #include <iomanip> #include <iostream> int main() { using namespace std::complex_literals; std::cout << std::fixed << std::setprecision(1); std::complex<double> z1 = 1i * 1i; // imaginary unit squared std::cout << "i * i = " << z1 << '\n'; std::complex<double> z2 = std::pow(1i, 2); // imaginary unit squared std::cout << "pow(i, 2) = " << z2 << '\n'; const double PI = std::acos(-1); // or std::numbers::pi in C++20 std::complex<double> z3 = std::exp(1i * PI); // Euler's formula std::cout << "exp(i * pi) = " << z3 << '\n'; std::complex<double> z4 = 1.0 + 2i, z5 = 1.0 - 2i; // conjugates std::cout << "(1 + 2i) * (1 - 2i) = " << z4 * z5 << '\n'; } Output: i * i = (-1.0,0.0) pow(i, 2) = (-1.0,0.0) exp(i * pi) = (-1.0,0.0) (1 + 2i) * (1 - 2i) = (5.0,0.0) Defect reports The following behavior-changing defect reports were applied retroac- tively to previously published C++ standards. DR Applied to Behavior as published Cor- rect behavior LWG 387 C++98 std::complex was not guaranteed to be guar- anteed to be compatible with C complex com- patible See also C documentation for Complex number arithmetic http://cppreference.com 2024.06.10 std::complex(3)
NAME | Synopsis | Template parameters | Member types | Member functions | Non-member functions | Exponential functions | Power functions | Trigonometric functions | Hyperbolic functions | Helper types | Implementation notes | Literals | Notes | Example | Output: | See also
Want to link to this manual page? Use this URL:
<https://man.FreeBSD.org/cgi/man.cgi?query=std::complex&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>