complex_log

complex_log (복소수 자연로그)

복소수 z의 복소 자연로그(밑 e 로그)를 구하는 함수예요. 음의 실수축을 따라 분지절단이 있어요.

출처: cppreference

본문

<complex> 헤더에 정의되어 있고, 시그니처는 다음과 같아요.

template< class T >
std::complex<T> log( const std::complex<T>& z );

음의 실수축을 따라 분지절단이 있는 복소수 z의 복소 자연(밑 e) 로그를 계산해요.

매개변수 (Parameters)

  • z — 복소수 값

반환값 (Return value)

오류가 없다면 z의 복소 자연로그를 반환해요. 허수축을 따라 [−iπ, +iπ] 구간의 띠, 실수축을 따라 수학적으로 무한한 범위에 있어요.

오류 처리와 특수 값 (Error handling and special values)

오류는 math_errhandling과 일관되게 보고돼요.

구현이 IEEE 부동소수점 연산을 지원한다면:

  • 함수는 허수부의 부호를 고려해 분지절단 위에서 연속이에요
  • std::log(std::conj(z)) == std::conj(std::log(z))
  • z가 (-0,+0)이면 결과는 (-∞,π)이고 FE_DIVBYZERO가 발생해요
  • z가 (+0,+0)이면 결과는 (-∞,+0)이고 FE_DIVBYZERO가 발생해요
  • z가 (x,+∞) (임의의 유한 x)이면 결과는 (+∞,π/2)
  • z가 (x,NaN) (임의의 유한 x)이면 결과는 (NaN,NaN)이고 FE_INVALID가 발생할 수 있어요
  • z가 (-∞,y) (임의의 양의 유한 y)이면 결과는 (+∞,π)
  • z가 (+∞,y) (임의의 양의 유한 y)이면 결과는 (+∞,+0)
  • z가 (-∞,+∞)이면 결과는 (+∞,3π/4)
  • z가 (+∞,+∞)이면 결과는 (+∞,π/4)
  • z가 (±∞,NaN)이면 결과는 (+∞,NaN)
  • z가 (NaN,y) (임의의 유한 y)이면 결과는 (NaN,NaN)이고 FE_INVALID가 발생할 수 있어요
  • z가 (NaN,+∞)이면 결과는 (+∞,NaN)
  • z가 (NaN,NaN)이면 결과는 (NaN,NaN)

참고 (Notes)

극좌표 성분 (r,θ)를 가진 복소수 z의 자연로그는 ln r + i(θ+2nπ)이고, 주값은 ln r + iθ예요.

이 함수의 의미는 C 함수 clog와 일관되도록 의도되었어요.

예제 (Example)

이 코드를 실행해 봐요.

#include <cmath>
#include <complex>
#include <iostream>

int main()
{
    std::complex<double> z {0.0, 1.0}; // r = 1, θ = pi / 2
    std::cout << "2 * log" << z << " = " << 2.0 * std::log(z) << '\n';

    std::complex<double> z2 {sqrt(2.0) / 2, sqrt(2.0) / 2}; // r = 1, θ = pi / 4
    std::cout << "4 * log" << z2 << " = " << 4.0 * std::log(z2) << '\n';

    std::complex<double> z3 {-1.0, 0.0}; // r = 1, θ = pi
    std::cout << "log" << z3 << " = " << std::log(z3) << '\n';
    std::complex<double> z4 {-1.0, -0.0}; // the other side of the cut
    std::cout << "log" << z4 << " (the other side of the cut) = " << std::log(z4) << '\n';
}

가능한 출력:

2 * log(0,1) = (0,3.14159)
4 * log(0.707107,0.707107) = (0,3.14159)
log(-1,0) = (0,3.14159)
log(-1,-0) (the other side of the cut) = (0,-3.14159)

결함 보고 (Defect reports)

이전에 발표된 C++ 표준에 소급 적용된 동작 변경 결함 보고는 다음과 같아요.

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

더 알아보기 (Learn more)

cppreference