"cmath" --- 복소수를 위한 수학 함수
***********************************

======================================================================

이 모듈은 복소수를 위한 수학 함수에 대한 액세스를 제공합니다. 이 모듈
의 함수는 정수, 부동 소수점 수 또는 복소수를 인자로 받아들입니다. 이들
은 또한 "__complex__()"나 "__float__()" 메서드를 가진 임의의 파이썬 객
체를 받아들일 것입니다: 이 메서드는 객체를 각각 복소수나 부동 소수점
수로 변환하기 위해 사용되며, 함수는 변환 결과에 적용됩니다.

참고:

  부호 있는 0에 대한 하드웨어와 시스템 수준 지원이 있는 플랫폼에서, 분
  지 절단(branch cut)을 수반하는 함수는 분지 절단의 *양* 면에서 연속입
  니다: 0의 부호는 분지 절단의 한 면을 다른 면과 구별합니다. 부호 있는
  0을 지원하지 않는 플랫폼에서 연속성은 아래에 지정된 것과 같습니다.


극좌표 변환
===========

파이썬 복소수 "z"는 *직교* 혹은 *데카르트* 좌표를 사용하여 내부적으로
저장됩니다. *실수부* "z.real"과 *허수부* "z.imag"에 의해 완전히 결정됩
니다. 다시 말해:

   z == z.real + z.imag*1j

*극좌표(polar coordinates)*는 복소수를 나타내는 다른 방법을 제공합니다
. 극좌표에서, 복소수 *z*는 모듈러스(modulus) *r*과 위상 각(phase
angle) *phi*로 정의됩니다. 모듈러스 *r*은 *z*에서 원점까지의 거리이며,
위상 *phi*는 양의 x축에서 원점과 *z*를 잇는 선분으로의 라디안(radian)
으로 측정한 반 시계 방향 각도입니다.

네이티브 직교 좌표와 극좌표 간의 변환에 다음 함수를 사용할 수 있습니다
.

cmath.phase(x)

   *x*의 위상(*x*의 *편각(argument)*이라고도 합니다)을 float로 반환합
   니다. "phase(x)"는 "math.atan2(x.imag, x.real)"과 동등합니다. 결과
   는 [-*π*, *π*] 범위에 놓이고, 이 작업의 분지 절단은 음의 실수 축에
   놓이고, 위로부터 연속입니다. 부호 있는 0을 지원하는 시스템(현재 사
   용 중인 대부분의 시스템을 포함합니다)에서, 이는 결과의 부호가
   "x.imag"가 0일 때도 "x.imag"의 부호와 같음을 의미합니다:

      >>> phase(complex(-1.0, 0.0))
      3.141592653589793
      >>> phase(complex(-1.0, -0.0))
      -3.141592653589793

참고:

  복소수 *x*의 모듈러스(절댓값)는 내장 "abs()" 함수를 사용하여 계산할
  수 있습니다. 이 연산을 위한 별도의 "cmath" 모듈 함수는 없습니다.

cmath.polar(x)

   *x* 표현을 극좌표로 반환합니다. 쌍 "(r, phi)"를 반환합니다. 여기서
   *r*은 *x*의 모듈러스이고 phi는 *x*의 위상입니다. "polar(x)"는
   "(abs(x), phase(x))"와 동등합니다.

cmath.rect(r, phi)

   극좌표 *r*과 *phi*를 가지는 복소수 *x*를 반환합니다. "r *
   (math.cos(phi) + math.sin(phi)*1j)"와 동등합니다.


거듭제곱과 로그 함수
====================

cmath.exp(x)

   *e*의 *x* 거듭제곱을 반환합니다. 여기서 *e*는 자연로그(natural
   logarithms)의 밑입니다.

cmath.log(x[, base])

   주어진 *밑(base)*에 대한 *x*의 로그를 반환합니다. *base*가 지정되지
   않으면, *x*의 자연로그를 반환합니다. 음의 실수 축을 따라 0에서부터
   -∞ 까지 가고, 위로부터 연속인 하나의 분지 절단이 있습니다.

cmath.log10(x)

   *x*의 밑이 10인 로그를 반환합니다. 이것은 "log()"와 같은 분지 절단
   을 가집니다.

cmath.sqrt(x)

   *x*의 제곱근을 반환합니다. 이것은 "log()"와 같은 분지 절단을 가집니
   다.


삼각 함수
=========

cmath.acos(x)

   *x*의 아크 코사인을 반환합니다. 두 개의 분지 절단이 있습니다: 하나
   는 실수 축을 따라 1에서 오른쪽으로 ∞까지 확장하고, 아래로부터 연속
   입니다. 다른 하나는 실수 축을 따라 -1에서 왼쪽으로 -∞까지 확장되고,
   위에서부터 연속입니다.

cmath.asin(x)

   *x*의 아크 사인을 반환합니다. 이것은 "acos()"와 같은 분지 절단을 가
   집니다.

cmath.atan(x)

   *x*의 아크 탄젠트를 반환합니다. 두 개의 분지 절단이 있습니다: 하나
   는 허수 축을 따라 "1j"에서 "∞j"까지 확장되며, 오른쪽으로부터 연속입
   니다. 다른 하나는 허수 축을 따라 "-1j"에서 "-∞j"까지 확장되며, 왼쪽
   으로부터 연속입니다.

cmath.cos(x)

   *x*의 코사인을 반환합니다.

cmath.sin(x)

   *x*의 사인을 반환합니다.

cmath.tan(x)

   *x*의 탄젠트를 반환합니다.


쌍곡선(hyperbolic) 함수
=======================

cmath.acosh(x)

   *x*의 역 쌍곡선 코사인을 반환합니다. 하나의 분지 절단이 있습니다,
   실수 축을 따라 1에서 왼쪽으로 -∞까지 확장되며 위로부터 연속입니다.

cmath.asinh(x)

   *x*의 역 쌍곡선 사인을 반환합니다. 두 개의 분지 절단이 있습니다: 하
   나는 허수 축을 따라 "1j"에서 "∞j"까지 확장되며, 오른쪽으로부터 연속
   입니다. 다른 하나는 허수 축을 따라 "-1j"에서 "-∞j"까지 확장되며, 왼
   쪽으로부터 연속입니다.

cmath.atanh(x)

   *x*의 역 쌍곡선 탄젠트를 반환합니다. 두 개의 분지 절단이 있습니다:
   하나는 실수 축을 따라 "1"에서 "∞"까지 확장되며, 아래로부터 연속입니
   다. 다른 하나는 실수 축을 따라 "-1"에서 "-∞"까지 확장되며, 위로부터
   연속입니다.

cmath.cosh(x)

   *x*의 쌍곡선 코사인을 반환합니다.

cmath.sinh(x)

   *x*의 쌍곡선 사인을 반환합니다.

cmath.tanh(x)

   *x*의 쌍곡선 탄젠트를 반환합니다.


분류 함수
=========

cmath.isfinite(x)

   *x*의 실수부와 허수부가 모두 유한이면 "True"를 반환하고, 그렇지 않
   으면 "False"를 반환합니다.

   버전 3.2에 추가.

cmath.isinf(x)

   *x*의 실수부나 허수부 중 하나가 무한이면 "True"를 반환하고, 그렇지
   않으면 "False"를 반환합니다.

cmath.isnan(x)

   *x*의 실수부나 허수부 중 하나가 NaN이면 "True"를 반환하고, 그렇지
   않으면 "False"를 반환합니다.

cmath.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)

   *a*와 *b* 값이 서로 가까우면 "True"를 반환하고, 그렇지 않으면
   "False"를 반환합니다.

   두 값을 가까운 것으로 간주하는지는 주어진 절대와 상대 허용 오차에
   따라 결정됩니다.

   *rel_tol*은 상대 허용 오차입니다 -- *a*와 *b* 사이의 최대 허용 차이
   이고, *a*나 *b*의 절댓값 중 더 큰 값에 상대적입니다. 예를 들어, 5%
   의 허용 오차를 설정하려면, "rel_tol=0.05"를 전달하십시오. 기본 허용
   오차는 "1e-09"이며, 이는 두 값이 약 9자리 십진 숫자 내에서 같음을
   보장합니다. *rel_tol*은 0보다 커야 합니다.

   *abs_tol*은 최소 절대 허용 오차입니다 -- 0에 가까운 비교에 유용합니
   다. *abs_tol*은 최소한 0이어야 합니다.

   에러가 발생하지 않으면, 결과는 다음과 같습니다: "abs(a-b) <=
   max(rel_tol * max(abs(a), abs(b)), abs_tol)".

   IEEE 754 특수 값 "NaN", "inf" 및 "-inf"는 IEEE 규칙에 따라 처리됩니
   다. 특히, "NaN"은 "NaN"을 포함한 다른 모는 값과 가깝다고 간주하지
   않습니다. "inf"와 "-inf"는 그들 자신하고만 가깝다고 간주합니다.

   버전 3.5에 추가.

   더 보기: **PEP 485** -- 근사 동등을 검사하는 함수.


상수
====

cmath.pi

   수학 상수 *π*의 float 값.

cmath.e

   수학 상수 *e*의 float 값.

cmath.tau

   수학 상수 *τ*의 float 값.

   버전 3.6에 추가.

cmath.inf

   부동 소수점 양의 무한대. "float('inf')"와 동등합니다.

   버전 3.6에 추가.

cmath.infj

   0 실수부와 양의 무한대 허수부를 갖는 복소수. "complex(0.0,
   float('inf'))"와 동등합니다.

   버전 3.6에 추가.

cmath.nan

   부동 소수점 "not a number" (NaN) 값. "float('nan')"과 동등합니다.

   버전 3.6에 추가.

cmath.nanj

   0 실수부와 NaN 허수부를 갖는 복소수. "complex(0.0, float('nan'))"과
   동등합니다.

   버전 3.6에 추가.

함수 선택은 모듈 "math"에서와 유사하지만 동일하지는 않습니다. 두 개의
모듈이 있는 이유는 일부 사용자가 복소수에 관심이 없고, 어쩌면 복소수가
무엇인지 모를 수도 있기 때문입니다. 그들에게는 "math.sqrt(-1)"이 복소
수를 반환하기보다 예외를 발생시키는 것이 좋습니다. 또한, "cmath"에 정
의된 함수는, 결과를 실수로 표현할 수 있을 때도 항상 복소수를 반환합니
다 (이때 복소수의 허수부는 0입니다).

분지 절단에 대한 참고 사항: 주어진 함수가 연속적이지 않은 점을 지나는
곡선입니다. 이것들은 많은 복소수 기능에서 필요한 기능입니다. 복소수 함
수로 계산해야 할 때, 분지 절단에 대해 이해가 필요하다고 가정합니다. 이
해를 위해서는 복소 변수에 관한 (너무 기초적이지 않은) 아무 책이나 참고
하면 됩니다. 수치 계산의 목적으로 분지 절단을 적절히 선택하는 방법에
대한 정보에 대해서는, 다음과 같은 좋은 참고 문헌이 있습니다:

더 보기:

  Kahan, W: Branch cuts for complex elementary functions; or, Much ado
  about nothing's sign bit. Iserles, A., and Powell, M. (eds.), The
  state of the art in numerical analysis. Clarendon Press (1987) pp165
  --211.
