Namespaces
Variants

std:: sqrt (std::complex)

From cppreference.net
헤더에 정의됨 <complex>
template < class T >
std:: complex < T > sqrt ( const std:: complex < T > & z ) ;

복소수 z 의 제곱근을 계산하며, 음의 실수축을 따라 가지 절단(branch cut)이 적용됩니다.

목차

매개변수

z - 제곱근을 구할 복소수

반환값

오류가 발생하지 않으면, 우반평면(실수축 상에서는 [0; +∞) , 허수축 상에서는 (−∞; +∞) 범위)에 있는 z 의 제곱근을 반환합니다.

오류 처리 및 특수 값

오류는 math_errhandling 과 일관되게 보고됩니다.

구현이 IEEE 부동 소수점 연산을 지원하는 경우,

  • 함수는 허수부의 부호를 고려하여 브랜치 컷(branch cut) 위에서 연속입니다.
  • std:: sqrt ( std:: conj ( z ) ) == std:: conj ( std:: sqrt ( z ) )
  • 만약 z (±0,+0) 이면, 결과는 (+0,+0) 입니다.
  • 만약 z (x,+∞) 이면, x가 NaN인 경우에도 결과는 (+∞,+∞) 입니다.
  • 만약 z (x,NaN) 이면, 결과는 (NaN,NaN) 입니다 (x가 ±∞가 아닌 경우). 그리고 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) 입니다.

참고 사항

이 함수의 의미 체계는 C 함수 csqrt 와 일관성을 유지하도록 설계되었습니다.

예제

#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)

결함 보고서

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

DR 적용 대상 게시된 동작 올바른 동작
LWG 2597 C++98 명세가 부호 있는 0 허수부를 잘못 처리함 잘못된 요구사항 제거됨

참고 항목

복소수 거듭제곱, 하나 또는 두 인자가 복소수일 수 있음
(함수 템플릿)
(C++11) (C++11)
제곱근 계산 ( x )
(함수)
함수 std::sqrt 를 valarray의 각 요소에 적용
(함수 템플릿)
C 문서 for csqrt