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 허수부를 잘못 처리함 | 잘못된 요구 제거 |