Namespaces
Variants

std:: complex

From cppreference.net
헤더 파일에 정의됨 <complex>
template < class T >
class complex ;
(1)
template <> class complex < float > ;
(2) (C++23까지)
template <> class complex < double > ;
(3) (C++23까지)
template <> class complex < long double > ;
(4) (C++23까지)

cv-비적용 부동 소수점 타입 에 대한 std::complex 의 특수화는 표준 (C++23까지) TriviallyCopyable (C++23부터) 이며 LiteralType s 입니다. 이는 복소수 를 표현하고 조작하기 위한 것입니다.

목차

템플릿 매개변수

T - 실수부와 허수부의 타입. T 가 cv-unqualified 표준 (C++23 이전) 부동소수점 타입이 아닌 경우 동작은 명시되지 않으며(컴파일 실패할 수 있음), T NumericType 이 아닌 경우 동작은 정의되지 않음.

멤버 타입

멤버 타입 정의
value_type T

멤버 함수

복소수를 생성한다
(public member function)
내용을 할당한다
(public member function)
복소수의 실수부에 접근한다
(public member function)
복소수의 허수부에 접근한다
(public member function)
두 복소수 또는 복소수와 스칼라의 복합 할당
(public member function)

비멤버 함수

복소수에 단항 연산자를 적용합니다
(함수 템플릿)
두 복소수 값 또는 복소수와 스칼라에 대한 복소수 연산 수행
(함수 템플릿)
(C++20에서 제거됨)
두 복소수 또는 복소수와 스칼라를 비교함
(함수 템플릿)
복소수를 직렬화 및 역직렬화합니다
(함수 템플릿)
std::complex 에서 실수부 또는 허수부에 대한 참조를 얻음
(함수 템플릿)
실수부를 반환합니다
(함수 템플릿)
허수부를 반환합니다
(함수 템플릿)
복소수의 크기를 반환합니다
(함수 템플릿)
위상각을 반환합니다
(함수 템플릿)
제곱 크기를 반환합니다
(함수 템플릿)
복소 켤레값을 반환합니다
(함수 템플릿)
(C++11)
리만 구면에 대한 투영을 반환합니다
(함수 템플릿)
크기와 위상각으로 복소수를 생성합니다
(함수 템플릿)
지수 함수
복소수 밑 e 지수 함수
(함수 템플릿)
음의 실수축을 따라 가지 절단을 갖는 복소수 자연 로그
(함수 템플릿)
음의 실수축을 따라 가지 절단을 갖는 복소수 상용 로그
(함수 템플릿)
거듭제곱 함수
복소수 거듭제곱, 하나 또는 두 인자가 복소수일 수 있음
(함수 템플릿)
우반평면 범위에서의 복소수 제곱근
(함수 템플릿)
삼각 함수
복소수의 사인을 계산합니다 ( sin(z) )
(함수 템플릿)
복소수의 코사인을 계산합니다 ( cos(z) )
(함수 템플릿)
복소수의 탄젠트를 계산합니다 ( tan(z) )
(함수 템플릿)
복소수의 아크 사인을 계산합니다 ( arcsin(z) )
(함수 템플릿)
복소수의 아크 코사인을 계산합니다 ( arccos(z) )
(함수 템플릿)
복소수의 아크 탄젠트를 계산합니다 ( arctan(z) )
(함수 템플릿)
쌍곡선 함수
복소수의 쌍곡선 사인을 계산합니다 ( sinh(z) )
(함수 템플릿)
복소수의 쌍곡선 코사인을 계산합니다 ( cosh(z) )
(함수 템플릿)
복소수의 쌍곡탄젠트를 계산합니다 ( tanh(z) )
(함수 템플릿)
복소수의 면적 쌍곡사인을 계산합니다 ( arsinh(z) )
(함수 템플릿)
복소수의 면적 쌍곡선 코사인을 계산합니다 ( arcosh(z) )
(함수 템플릿)
복소수의 면적 쌍곡탄젠트를 계산합니다 ( artanh(z) )
(함수 템플릿)

헬퍼 타입

std::complex 의 크기를 구함
(클래스 템플릿 특수화)
std::complex 의 기저 실수 및 허수 숫자 타입을 구함
(클래스 템플릿 특수화)

배열 지향 접근

모든 z 객체에 대해 std::complex<T> 타입의, reinterpret_cast < T ( & ) [ 2 ] > ( z ) [ 0 ] z 의 실수부이고, reinterpret_cast < T ( & ) [ 2 ] > ( z ) [ 1 ] z 의 허수부입니다.

std::complex<T> 배열의 원소를 가리키는 임의의 포인터 p 와 유효한 배열 인덱스 i 에 대해, reinterpret_cast < T * > ( p ) [ 2 * i ] 는 복소수 p [ i ] 의 실수부이고, reinterpret_cast < T * > ( p ) [ 2 * i + 1 ] 는 복소수 p [ i ] 의 허수부입니다.

이 요구 사항의 의도는 C++ 라이브러리 복소수 타입과 C 언어 복소수 타입 (및 이들의 배열) 간의 이진 호환성을 보존하는 것입니다. 이들은 동일한 객체 표현 요구 사항을 가지고 있습니다.

구현 참고 사항

배열 지향 접근의 요구사항을 충족시키기 위해, 구현체는 std::complex 특수화의 실수부와 허수부를 별개의 인접 메모리 위치에 저장하도록 제한됩니다. 비정적 데이터 멤버에 대한 가능한 선언 방식은 다음과 같습니다:

  • value_type[2] 타입의 배열로, 첫 번째 요소는 실수부를, 두 번째 요소는 허수부를 저장합니다 (예: Microsoft Visual Studio);
  • value_type _Complex 타입의 단일 멤버로 (해당 C 언어 복소수 타입 을 캡슐화) (예: GNU libstdc++);
  • value_type 타입의 두 멤버로, 동일한 멤버 접근 권한을 가지며 각각 실수부와 허수부를 저장합니다 (예: LLVM libc++).

구현체는 실수부와 허수부와 분리된 저장 공간을 차지하는 추가적인 비정적 데이터 멤버를 선언할 수 없으며, 클래스 템플릿 특수화가 어떤 패딩 비트 도 포함하지 않도록 보장해야 합니다. 구현체는 또한 배열 접근 최적화가 value_type 에 대한 포인터가 std::complex 특수화나 그 배열을 별칭화(aliasing)할 가능성을 고려하도록 보장해야 합니다.

리터럴

인라인 네임스페이스에 정의됨 std::literals::complex_literals
순수 허수를 나타내는 std::complex 리터럴
(함수)

참고 사항

기능 테스트 매크로 표준 기능
__cpp_lib_constexpr_complex 201711L (C++20) constexpr 간단한 복소수 수학 함수들 in <complex>
202306L (C++26) 추가 constexpr for <complex>
__cpp_lib_tuple_like 202311L (C++26) 튜플 프로토콜 추가 to std::complex

예제

#include <cmath>
#include <complex>
#include <iomanip>
#include <iostream>
#include <ranges>
int main()
{
    using namespace std::complex_literals;
    std::cout << std::fixed << std::setprecision(1);
    std::complex<double> z1 = 1i * 1i; // 허수 단위 제곱
    std::cout << "i * i = " << z1 << '\n';
    std::complex<double> z2 = std::pow(1i, 2); // 허수 단위 제곱
    std::cout << "pow(i, 2) = " << z2 << '\n';
    const double PI = std::acos(-1); // 또는 C++20의 std::numbers::pi
    std::complex<double> z3 = std::exp(1i * PI); // 오일러 공식
    std::cout << "exp(i * pi) = " << z3 << '\n';
    std::complex<double> z4 = 1.0 + 2i, z5 = 1.0 - 2i; // 켤레 복소수
    std::cout << "(1 + 2i) * (1 - 2i) = " << z4 * z5 << '\n';
    const auto zz = {0.0 + 1i, 2.0 + 3i, 4.0 + 5i};
#if __cpp_lib_tuple_like >= 202311L
    for (double re : zz | std::views::keys)
        std::cout << re << ' ';
    std::cout << '\n';
    for (double im : zz | std::views::values)
        std::cout << im << ' ';
    std::cout << '\n';
#else
    for (double re : zz | std::views::transform([](auto z){ return z.real(); }))
        std::cout << re << ' ';
    std::cout << '\n';
    for (double im : zz | std::views::transform([](auto z){ return z.imag(); }))
        std::cout << im << ' ';
    std::cout << '\n';
#endif
}

출력:

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)
0.0 2.0 4.0
1.0 3.0 5.0

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 387 C++98 std::complex 가 C complex 와 호환된다는 보장이 없었음 호환이 보장됨

참고 항목

C 문서 for 복소수 연산