complex_sqrt
complex_sqrt (복소수 제곱근)
복소수 z의 제곱근을 구하는 함수예요. 음의 실수축을 따라 분지절단이 있어요.
출처: cppreference
본문
<complex> 헤더에 정의되어 있고, 시그니처는 다음과 같아요.
template< class T >
std::complex<T> sqrt( const std::complex<T>& z );
음의 실수축을 따라 분지절단이 있는 복소수 z의 제곱근을 계산해요.
매개변수 (Parameters)
- z — 제곱근을 구할 복소수
반환값 (Return value)
오류가 없다면 z의 제곱근을 반환해요. 오른쪽 반평면 범위에 있어요(실수축을 따라 [0; +∞), 허수축을 따라 (−∞; +∞))를 포함).
오류 처리와 특수 값 (Error handling and special values)
오류는 math_errhandling과 일관되게 보고돼요.
구현이 IEEE 부동소수점 연산을 지원한다면:
- 함수는 허수부의 부호를 고려해 분지절단 위에서 연속이에요
std::sqrt(std::conj(z)) == std::conj(std::sqrt(z))- z가 (±0,+0)이면 결과는 (+0,+0)
- z가 (x,+∞)이면 x가 NaN이어도 결과는 (+∞,+∞)
- z가 (x,NaN)이면 x가 ±∞가 아니면 결과는 (NaN,NaN)이고 FE_INVALID가 발생할 수 있어요
- z가 (-∞,y)이면 양의 유한 y에 대해 결과는 (+0,+∞)
- z가 (+∞,y)이면 양의 유한 y에 대해 결과는 (+∞,+0)
- z가 (-∞,NaN)이면 결과는 (NaN,∞) (허수부 부호는 지정되지 않음)
- z가 (+∞,NaN)이면 결과는 (+∞,NaN)
- z가 (NaN,y)이면 결과는 (NaN,NaN)이고 FE_INVALID가 발생할 수 있어요
- z가 (NaN,NaN)이면 결과는 (NaN,NaN)
참고 (Notes)
이 함수의 의미는 C 함수 csqrt와 일관되도록 의도되었어요.
예제 (Example)
이 코드를 실행해 봐요.
#include <complex>
#include <iostream>
int main()
{
std::cout << "Square root of -4 is "
<< std::sqrt(std::complex<double>(-4.0, 0.0)) << '\n'
<< "Square root of (-4,-0) is "
<< std::sqrt(std::complex<double>(-4.0, -0.0))
<< " (the other side of the cut)\n";
}
출력:
Square root of -4 is (0,2)
Square root of (-4,-0) is (0,-2) (the other side of the cut)
결함 보고 (Defect reports)
이전에 발표된 C++ 표준에 소급 적용된 동작 변경 결함 보고는 다음과 같아요.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 2597 | C++98 | 사양이 부호 있는 0 허수부를 잘못 처리함 | 잘못된 요구 제거 |