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