math — 수학 함수

math — 수학 함수

math 모듈은 C 표준이 정의한 것을 포함해 흔히 쓰는 수학 함수와 상수에 접근을 제공해요.

이 함수들은 복소수와 함께 사용할 수 없어요. 복소수 지원이 필요하면 cmath 모듈의 같은 이름 함수를 사용하세요. 복소수를 지원하는 함수와 그렇지 않은 함수를 구분하는 이유는, 대부분의 사용자가 복소수를 이해하는 데 필요한 만큼의 수학을 배우고 싶어 하지 않기 때문이에요. 복소수 결과 대신 예외를 받으면 매개변수로 사용된 예상치 못한 복소수를 더 일찍 발견할 수 있어서, 프로그래머가 그것이 어떻게 그리고 왜 생성됐는지 결정할 수 있어요.

이 모듈이 제공하는 함수는 다음과 같아요. 명시적으로 달리 언급하지 않는 한 모든 반환값은 float예요.

출처: Python 표준 라이브러리

본문

정수론 함수 (Number-theoretic functions)

함수 설명
comb(n, k) 반복 없이, 순서 없이 n개 항목에서 k개를 고르는 방법의 수
factorial(n) n 팩토리얼
gcd(*integers) 정수 인자들의 최대공약수
isqrt(n) 음이 아닌 정수 n의 정수 제곱근
lcm(*integers) 정수 인자들의 최소공배수
perm(n, k) 반복 없이, 순서 있게 n개 항목에서 k개를 고르는 방법의 수

부동소수점 산술 (Floating point arithmetic)

함수 설명
ceil(x) x의 올림, x보다 크거나 같은 가장 작은 정수
fabs(x) x의 절댓값
floor(x) x의 버림, x보다 작거나 같은 가장 큰 정수
fma(x, y, z) Fused multiply-add 연산: (x * y) + z
fmod(x, y) 나눗셈 x / y 의 나머지
modf(x) x의 소수 부분과 정수 부분
remainder(x, y) y에 대한 x의 나머지
trunc(x) x의 정수 부분

부동소수점 조작 함수 (Floating point manipulation functions)

함수 설명
copysign(x, y) y의 부호를 가진 x의 크기(절댓값)
frexp(x) x의 가수와 지수
isclose(a, b, rel_tol, abs_tol) a와 b가 서로 가까운지 확인
isfinite(x) x가 무한대도 NaN도 아닌지 확인
isinf(x) x가 양의 또는 음의 무한대인지 확인
isnan(x) x가 NaN인지(숫자가 아님) 확인
ldexp(x, i) x * (2**i), 함수 frexp()의 역
nextafter(x, y, steps) y 쪽으로 x 다음의 steps 단계 부동소수점 값
ulp(x) x의 최하위 비트 값

거듭제곱, 지수, 로그 함수 (Power, exponential and logarithmic functions)

함수 설명
cbrt(x) x의 세제곱근
exp(x) e의 x제곱
exp2(x) 2의 x제곱
expm1(x) e의 x제곱에서 1을 뺀 값
log(x, base) 주어진 밑(base, 기본 e)에 대한 x의 로그
log1p(x) 1+x의 자연로그(밑 e)
log2(x) x의 밑 2 로그
log10(x) x의 밑 10 로그
pow(x, y) x의 y제곱
sqrt(x) x의 제곱근

합계·곱 함수 (Summation and product functions)

함수 설명
dist(p, q) 좌표 이터러블로 주어진 두 점 p와 q 사이의 유클리드 거리
fsum(iterable) 입력 이터러블 값들의 합
hypot(*coordinates) 좌표 이터러블의 유클리드 노름
prod(iterable, start) 시작 값과 함께 입력 이터러블 요소들의 곱
sumprod(p, q) 두 이터러블 p와 q에서의 곱들의 합

각도 변환 (Angular conversion)

함수 설명
degrees(x) 각도 x를 라디안에서 도로 변환
radians(x) 각도 x를 도에서 라디안으로 변환

삼각 함수 (Trigonometric functions)

함수 설명
acos(x) x의 아크 코사인
asin(x) x의 아크 사인
atan(x) x의 아크 탄젠트
atan2(y, x) atan(y / x)
cos(x) x의 코사인
sin(x) x의 사인
tan(x) x의 탄젠트

쌍곡 함수 (Hyperbolic functions)

함수 설명
acosh(x) x의 역쌍곡 코사인
asinh(x) x의 역쌍곡 사인
atanh(x) x의 역쌍곡 탄젠트
cosh(x) x의 쌍곡 코사인
sinh(x) x의 쌍곡 사인
tanh(x) x의 쌍곡 탄젠트

특수 함수 (Special functions)

함수 설명
erf(x) x에서의 오차 함수
erfc(x) x에서의 여오차 함수
gamma(x) x에서의 감마 함수
lgamma(x) x에서 감마 함수 절댓값의 자연로그

상수 (Constants)

상수 설명
pi π = 3.141592…
e e = 2.718281…
tau τ = 2π = 6.283185…
inf 양의 무한대
nan "숫자가 아님" (NaN)

정수론 함수

math.comb(n, k)

반복 없이, 순서 없이 n개 항목에서 k개를 고르는 방법의 수를 돌려줘요. k <= n일 때 n! / (k! * (n - k)!)로 계산되고, k > n일 때 0으로 계산돼요. (1 + x)ⁿ의 다항식 전개에서 k번째 항의 계수와 동등해서 이항 계수라고도 불러요. 어느 인자든 정수가 아니면 TypeError, 음수면 ValueError를 일으켜요.

버전 3.8에 추가됨.

math.factorial(n)

음이 아닌 정수 n의 팩토리얼을 돌려줘요.

버전 3.10에서 변경: 정수 값을 가진 float(예: 5.0)는 더 이상 받아들여지지 않음.

math.gcd(*integers)

지정된 정수 인자들의 최대공약수를 돌려줘요. 인자 중 하나라도 0이 아니면 반환값은 모든 인자의 약수인 가장 큰 양의 정수예요. 모든 인자가 0이면 반환값은 0이에요. 인자 없이 gcd()를 호출하면 0을 돌려줘요.

버전 3.5에 추가됨. 버전 3.9에서 변경: 임의 개수의 인자 지원 추가. 이전에는 두 인자만 지원됐음.

math.isqrt(n)

음이 아닌 정수 n의 정수 제곱근을 돌려줘요. 이것은 n의 정확한 제곱근의 버림, 즉 a² ≤ n인 가장 큰 정수 a와 동등해요. 어떤 애플리케이션에서는 n ≤ a²인 가장 작은 정수, 다시 말해 n의 정확한 제곱근의 올림이 더 편할 수 있어요. 양의 n에 대해 이것은 a = 1 + isqrt(n - 1)로 계산할 수 있어요.

버전 3.8에 추가됨.

math.lcm(*integers)

지정된 정수 인자들의 최소공배수를 돌려줘요. 모든 인자가 0이 아니면 반환값은 모든 인자의 배수인 가장 작은 양의 정수예요. 인자 중 하나라도 0이면 반환값은 0이에요. 인자 없이 lcm()을 호출하면 1을 돌려줘요.

버전 3.9에 추가됨.

math.perm(n, k=None)

반복 없이, 순서 있게 n개 항목에서 k개를 고르는 방법의 수를 돌려줘요. k <= n일 때 n! / (n - k)!로 계산되고, k > n일 때 0으로 계산돼요. k를 지정하지 않거나 None이면 kn으로 기본 설정되고 함수는 n!을 돌려줘요. 어느 인자든 정수가 아니면 TypeError, 음수면 ValueError를 일으켜요.

버전 3.8에 추가됨.

부동소수점 산술

math.ceil(x)

x의 올림, x보다 크거나 같은 가장 작은 정수를 돌려줘요. x가 float가 아니면 Integral 값을 돌려줘야 하는 x.__ceil__에 위임해요.

math.fabs(x)

x의 절댓값을 돌려줘요.

math.floor(x)

x의 버림, x보다 작거나 같은 가장 큰 정수를 돌려줘요. x가 float가 아니면 Integral 값을 돌려줘야 하는 x.__floor__에 위임해요.

math.fma(x, y, z)

Fused multiply-add 연산. 무한 정밀도와 범위로 계산한 다음 float 형식으로 한 번 반올림한 것처럼 (x * y) + z를 돌려줘요. 이 연산은 종종 직접 표현 (x * y) + z보다 더 나은 정확도를 제공해요.

이 함수는 IEEE 754 표준에 설명된 fusedMultiplyAdd 연산의 사양을 따라요. 표준은 fma(0, inf, nan)fma(inf, 0, nan)의 결과라는 한 가지 경우를 구현 정의로 남겨 둬요. 이 경우 math.fma는 NaN을 돌려주고 어떤 예외도 일으키지 않아요.

버전 3.13에 추가됨.

math.fmod(x, y)

플랫폼 C 라이브러리 함수 fmod(x, y)가 정의한 대로 x / y의 부동소수점 나머지를 돌려줘요. Python 표현식 x % y가 같은 결과를 돌려주지 않을 수 있음에 주의하세요. C 표준의 의도는 fmod(x, y)가 결과가 x와 같은 부호이고 abs(y)보다 작은 크기를 가지는 어떤 정수 n에 대해 (수학적으로; 무한 정밀도로) 정확히 x - n*y와 같다는 것이에요. Python의 x % y는 대신 y의 부호를 가진 결과를 돌려주고, float 인자에 대해 정확히 계산되지 않을 수 있어요. 예를 들어 fmod(-1e-100, 1e100)-1e-100이지만, Python의 -1e-100 % 1e100 결과는 1e100-1e-100인데 이것은 float로 정확히 표현할 수 없어 놀랍게도 1e100으로 반올림돼요. 이런 이유로 float를 다룰 때는 일반적으로 fmod() 함수가 선호되고, 정수를 다룰 때는 Python의 x % y가 선호돼요.

math.modf(x)

x의 소수 부분과 정수 부분을 돌려줘요. 두 결과 모두 x의 부호를 가지며 float예요. modf()는 C 동등물과 다른 호출/반환 패턴을 가짐에 주의하세요. 단일 인자를 받고 값 쌍을 돌려주지, 두 번째 반환값을 '출력 매개변수'로 돌려주지 않아요(Python에는 그런 게 없어요).

math.remainder(x, y)

y에 대한 x의 IEEE 754-스타일 나머지를 돌려줘요. 유한한 x와 유한한 0이 아닌 y에 대해, 이것은 n이 몫 x / y의 정확한 값에 가장 가까운 정수인 차 x - n*y예요. x / y가 두 연속 정수의 정확히 중간이면 n에 가장 가까운 짝수 정수가 사용돼요. 나머지 r = remainder(x, y)는 따라서 항상 abs(r) <= 0.5 * abs(y)를 만족해요.

특수한 경우는 IEEE 754를 따라요. 특히 remainder(x, math.inf)는 유한한 x에 대해 x이고, remainder(x, 0)remainder(math.inf, x)는 NaN이 아닌 x에 대해 ValueError를 일으켜요. 나머지 연산 결과가 0이면 그 0은 x와 같은 부호를 가져요. IEEE 754 이진 부동소수점을 사용하는 플랫폼에서는 이 연산의 결과가 항상 정확히 표현 가능해요. 반올림 오류가 도입되지 않아요.

버전 3.7에 추가됨.

math.trunc(x)

소수 부분을 제거해 정수 부분만 남긴 x를 돌려줘요. 이것은 0 쪽으로 반올림해요: trunc()은 양의 x에 대해 floor()와, 음의 x에 대해 ceil()과 동등해요. x가 float가 아니면 Integral 값을 돌려줘야 하는 x.__trunc__에 위임해요.

ceil(), floor(), modf() 함수에 대해, 충분히 큰 크기의 모든 부동소수점 수는 정확한 정수라는 점에 주의하세요. Python float는 보통 53비트 이하의 정밀도를 가지는데(플랫폼 C double 타입과 같음), 그 경우 abs(x) >= 2**52인 어떤 float x도 필연적으로 소수 비트가 없어요.

부동소수점 조작 함수

math.copysign(x, y)

x의 크기(절댓값)이지만 y의 부호를 가진 float를 돌려줘요. 부호 있는 0을 지원하는 플랫폼에서 copysign(1.0, -0.0)-1.0을 돌려줘요.

math.frexp(x)

x의 가수와 지수를 쌍 (m, e)로 돌려줘요. x가 유한한 0이 아닌 숫자이면 m은 0.5 <= abs(m) < 1.0인 float이고, 정수 e는 x == m * 2**e가 정확히 성립하도록 돼요. 아니면 (x, 0)을 돌려줘요. 이것은 float의 내부 표현을 이식 가능한 방식으로 "분해"하는 데 사용돼요. frexp()는 C 동등물과 다른 호출/반환 패턴을 가짐에 주의하세요(Python에는 '출력 매개변수'가 없어요).

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

값 a와 b가 서로 가까우면 True, 아니면 False를 돌려줘요.

두 값이 가까운지 여부는 주어진 절대 및 상대 허용 오차에 따라 결정돼요. 오류가 없으면 결과는 abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)이 돼요.

rel_tol은 상대 허용 오차로, a와 b 사이의 최대 허용 차이를 a나 b 중 더 큰 절댓값에 상대적으로 나타낸 값이에요. 예를 들어 5% 허용 오차를 설정하려면 rel_tol=0.05를 전달해요. 기본 허용 오차는 1e-09인데, 약 9자리 십진수 안에서 두 값이 같음을 보장해요. rel_tol은 음이 아니고 1.0보다 작아야 해요.

abs_tol은 절대 허용 오차이고 기본값은 0.0이며 음이 아니어야 해요. x를 0.0과 비교할 때 isclose(x, 0)abs(x) <= rel_tol * abs(x)로 계산되는데, 이는 1.0보다 작은 rel_tol과 0이 아닌 x에 대해 False예요. 그래서 호출에 적절한 양의 abs_tol 인자를 추가하세요.

IEEE 754 특수 값 NaN, inf, -inf는 IEEE 규칙에 따라 처리돼요. 구체적으로 NaN은 NaN을 포함한 어떤 다른 값에도 가깝다고 간주되지 않아요. inf-inf는 자기 자신에게만 가깝다고 간주돼요.

버전 3.5에 추가됨. (PEP 485 참고)

math.isfinite(x)

x가 무한대도 NaN도 아니면 True, 아니면 False를 돌려줘요. (0.0은 유한한 것으로 간주됨에 주의.)

버전 3.2에 추가됨.

math.isinf(x)

x가 양의 또는 음의 무한대이면 True, 아니면 False를 돌려줘요.

math.isnan(x)

x가 NaN(숫자가 아님)이면 True, 아니면 False를 돌려줘요.

math.ldexp(x, i)

x * (2**i)를 돌려줘요. 이것은 본질적으로 함수 frexp()의 역이에요.

math.nextafter(x, y, steps=1)

y 쪽으로 x 다음의 steps 단계 부동소수점 값을 돌려줘요. x가 y와 같으면 steps가 0이 아닌 한 y를 돌려줘요.

예시:

  • math.nextafter(x, math.inf)은 올라가요: 양의 무한대로 향해요.
  • math.nextafter(x, -math.inf)은 내려가요: 음의 무한대로 향해요.
  • math.nextafter(x, 0.0)은 0으로 향해요.
  • math.nextafter(x, math.copysign(math.inf, x))은 0에서 멀어져요.

math.ulp()도 참고하세요.

버전 3.9에 추가됨. 버전 3.12에서 변경: steps 인자 추가.

math.ulp(x)

float x의 최하위 비트 값을 돌려줘요:

  • x가 NaN(숫자가 아님)이면 x를 돌려줘요.
  • x가 음수면 ulp(-x)를 돌려줘요.
  • x가 양의 무한대면 x를 돌려줘요.
  • x가 0과 같으면 (최소 양의 정규화 float인 sys.float_info.min보다 작은) 가장 작은 양의 비정규화로 표현 가능한 float를 돌려줘요.
  • x가 가장 큰 양의 표현 가능한 float와 같으면, x보다 작은 첫 번째 float가 x - ulp(x)가 되도록 x의 최하위 비트 값을 돌려줘요.
  • 아니면(x가 양의 유한수), x보다 큰 첫 번째 float가 x + ulp(x)가 되도록 x의 최하위 비트 값을 돌려줘요.

ULP는 "Unit in the Last Place"(마지막 자리의 단위)를 뜻해요. math.nextafter()sys.float_info.epsilon도 참고하세요.

버전 3.9에 추가됨.

거듭제곱, 지수, 로그 함수

math.cbrt(x)

x의 세제곱근을 돌려줘요. 버전 3.11에 추가됨.

math.exp(x)

자연로그의 밑 e = 2.718281…의 x제곱을 돌려줘요. 이것은 보통 math.e ** x 또는 pow(math.e, x)보다 더 정확해요.

math.exp2(x)

2의 x제곱을 돌려줘요. 버전 3.11에 추가됨.

math.expm1(x)

e의 x제곱에서 1을 뺀 값을 돌려줘요. 여기서 e는 자연로그의 밑이에요. 작은 float x에 대해 exp(x) - 1의 뺄셈은 상당한 정밀도 손실을 낼 수 있어요. expm1() 함수는 이 값을 완전한 정밀도로 계산하는 방법을 제공해요:

>>> from math import exp, expm1
>>> exp(1e-5) - 1  # gives result accurate to 11 places
1.0000050000069649e-05
>>> expm1(1e-5)    # result accurate to full precision
1.0000050000166668e-05

버전 3.2에 추가됨.

math.log(x[, base])

인자 하나로, x의 자연로그(밑 e)를 돌려줘요. 인자 둘로, log(x)/log(base)로 계산된 주어진 밑에 대한 x의 로그를 돌려줘요.

math.log1p(x)

1+x의 자연로그(밑 e)를 돌려줘요. 결과는 0에 가까운 x에 대해 정확한 방식으로 계산돼요.

math.log2(x)

x의 밑 2 로그를 돌려줘요. 이것은 보통 log(x, 2)보다 더 정확해요. 버전 3.3에 추가됨. (int.bit_length()도 참고하세요.)

math.log10(x)

x의 밑 10 로그를 돌려줘요. 이것은 보통 log(x, 10)보다 더 정확해요.

math.pow(x, y)

x의 y제곱을 돌려줘요. 특수한 경우는 가능한 한 IEEE 754 표준을 따라요. 특히 pow(1.0, x)pow(x, 0.0)은 x가 0이거나 NaN이어도 항상 1.0을 돌려줘요. x와 y가 모두 유한하고 x가 음수이며 y가 정수가 아니면 pow(x, y)는 정의되지 않고 ValueError를 일으켜요.

내장 ** 연산자와 달리 math.pow()는 두 인자를 모두 float 타입으로 변환해요. 정확한 정수 거듭제곱을 계산하려면 ** 또는 내장 pow() 함수를 사용하세요.

버전 3.11에서 변경: 특수한 경우 pow(0.0, -inf)pow(-0.0, -inf)가 IEEE 754와 일관되도록 ValueError 대신 inf를 돌려주도록 변경됨.

math.sqrt(x)

x의 제곱근을 돌려줘요.

합계·곱 함수

math.dist(p, q)

두 점 p와 q 사이의 유클리드 거리를 돌려줘요. 각 점은 좌표의 시퀀스(또는 이터러블)로 주어져요. 두 점은 같은 차원이어야 해요. 대략:

sqrt(sum((px - qx) ** 2.0 for px, qx in zip(p, q)))

버전 3.8에 추가됨.

math.fsum(iterable)

이터러블 값들의 정확한 부동소수점 합을 돌려줘요. 여러 중간 부분 합을 추적해 정밀도 손실을 피해요. 알고리즘의 정확도는 IEEE-754 산술 보장과 반올림 모드가 반올림(절반은 짝수로, half-even)인 전형적인 경우에 의존해요. 일부 비-Windows 빌드에서 밑바탕 C 라이브러리는 확장 정밀도 덧셈을 사용하고 가끔 중간 합을 두 번 반올림해서 최하위 비트에서 벗어날 수 있어요. 자세한 논의와 두 가지 대안 접근은 정확한 부동소수점 합산에 대한 ASPN cookbook 레시피를 참고하세요.

math.hypot(*coordinates)

유클리드 노름, sqrt(sum(x**2 for x in coordinates))를 돌려줘요. 이것은 원점에서 좌표가 주어진 점까지의 벡터 길이예요. 2차원 점 (x, y)에 대해 이것은 피타고라스 정리로 직각삼각형의 빗변, sqrt(x*x + y*y)를 계산하는 것과 동등해요.

버전 3.8에서 변경: n차원 점 지원 추가. 이전에는 2차원 경우만 지원됐음. 버전 3.10에서 변경: 최대 오류가 1 ulp(마지막 자리의 단위) 미만이 되도록 알고리즘 정확도 개선. 더 전형적으로 결과는 거의 항상 1/2 ulp 내로 올바르게 반올림됨.

math.prod(iterable, *, start=1)

입력 이터러블의 모든 요소의 곱을 계산해요. 곱의 기본 시작 값은 1이에요. 이터러블이 비어 있으면 start 값을 돌려줘요. 이 함수는 숫자 값과 함께 사용하기 위해 특별히 만들어졌고 숫자가 아닌 타입을 거부할 수 있어요.

버전 3.8에 추가됨.

math.sumprod(p, q)

두 이터러블 p와 q에서 값들의 곱의 합을 돌려줘요. 입력의 길이가 같지 않으면 ValueError를 일으켜요. 대략:

sum(map(operator.mul, p, q, strict=True))

float 및 혼합 int/float 입력에 대해 중간 곱과 합은 확장 정밀도로 계산돼요.

버전 3.12에 추가됨.

각도 변환

math.degrees(x)

각도 x를 라디안에서 도로 변환해요.

math.radians(x)

각도 x를 도에서 라디안으로 변환해요.

삼각 함수

math.acos(x)

라디안 단위의 x의 아크 코사인을 돌려줘요. 결과는 0과 pi 사이예요.

math.asin(x)

라디안 단위의 x의 아크 사인을 돌려줘요. 결과는 -pi/2와 pi/2 사이예요.

math.atan(x)

라디안 단위의 x의 아크 탄젠트를 돌려줘요. 결과는 -pi/2와 pi/2 사이예요.

math.atan2(y, x)

라디안 단위의 atan(y / x)를 돌려줘요. 결과는 -pi와 pi 사이예요. 원점에서 점 (x, y)로의 평면 벡터가 양의 X축과 이루는 각이에요. atan2()의 요점은 두 입력의 부호를 알기 때문에 각도의 올바른 사분면을 계산할 수 있다는 거예요. 예를 들어 atan(1)atan2(1, 1)은 모두 pi/4이지만, atan2(-1, -1)-3*pi/4예요.

math.cos(x)

x 라디안의 코사인을 돌려줘요.

math.sin(x)

x 라디안의 사인을 돌려줘요.

math.tan(x)

x 라디안의 탄젠트를 돌려줘요.

쌍곡 함수

쌍곡 함수는 원 대신 쌍곡선에 기반한 삼각 함수의 대응물이에요.

  • math.acosh(x) — x의 역쌍곡 코사인.
  • math.asinh(x) — x의 역쌍곡 사인.
  • math.atanh(x) — x의 역쌍곡 탄젠트.
  • math.cosh(x) — x의 쌍곡 코사인.
  • math.sinh(x) — x의 쌍곡 사인.
  • math.tanh(x) — x의 쌍곡 탄젠트.

특수 함수

math.erf(x)

x에서의 오차 함수를 돌려줘요. erf() 함수는 누적 표준 정규 분포 같은 전통적인 통계 함수를 계산하는 데 쓸 수 있어요:

def phi(x):
    'Cumulative distribution function for the standard normal distribution'
    return (1.0 + erf(x / sqrt(2.0))) / 2.0

버전 3.2에 추가됨.

math.erfc(x)

x에서의 여오차 함수를 돌려줘요. 여오차 함수는 1.0 - erf(x)로 정의돼요. 1에서의 뺄셈이 유효 숫자의 손실을 일으킬 큰 x 값에 사용돼요.

버전 3.2에 추가됨.

math.gamma(x)

x에서의 감마 함수를 돌려줘요. 버전 3.2에 추가됨.

math.lgamma(x)

x에서 감마 함수 절댓값의 자연로그를 돌려줘요. 버전 3.2에 추가됨.

상수

math.pi

사용 가능한 정밀도까지의 수학 상수 π = 3.141592….

math.e

사용 가능한 정밀도까지의 수학 상수 e = 2.718281….

math.tau

사용 가능한 정밀도까지의 수학 상수 τ = 6.283185…. Tau는 2π와 같은 원 상수이고, 원의 원주와 반지름의 비율이에요.

버전 3.6에 추가됨.

math.inf

부동소수점 양의 무한대. (음의 무한대는 -math.inf을 사용하세요.) float('inf')의 출력과 동등해요. 버전 3.5에 추가됨.

math.nan

부동소수점 "숫자가 아님"(NaN) 값. float('nan')의 출력과 동등해요. IEEE-754 표준 요구사항 때문에 math.nanfloat('nan')은 자기 자신을 포함해 어떤 다른 숫자 값과도 같다고 간주되지 않아요. 숫자가 NaN인지 확인하려면 is== 대신 isnan() 함수로 테스트하세요.

예:

>>> import math
>>> math.nan == math.nan
False
>>> float('nan') == float('nan')
False
>>> math.isnan(math.nan)
True
>>> math.isnan(float('nan'))
True

버전 3.5에 추가됨. 버전 3.11에서 변경: 이제 항상 사용 가능.

CPython 구현 세부 사항: math 모듈은 대부분 플랫폼 C math 라이브러리 함수의 얇은 래퍼로 구성돼요. 특수한 경우의 동작은 적절할 때 C99 표준의 Annex F를 따라요. 현재 구현은 sqrt(-1.0)이나 log(0.0) 같은 잘못된 연산에 대해 ValueError를(C99 Annex F는 invalid operation 또는 divide-by-zero 신호를 권장) 그리고 결과가 넘치는 경우(예: exp(1000.0)) OverflowError를 일으켜요. 입력 인자 중 하나 이상이 NaN이 아니면 위 함수 중 어떤 것도 NaN을 돌려주지 않아요. 그런 경우 대부분의 함수는 NaN을 돌려주지만(C99 Annex F를 다시 따라) 이 규칙에는 예외가 몇 가지 있어요. 예를 들어 pow(float('nan'), 0.0)이나 hypot(float('nan'), float('inf'))예요.

Python은 signaling NaN과 quiet NaN을 구분하려 시도하지 않고, signaling NaN에 대한 동작은 지정되지 않음에 주의하세요. 전형적인 동작은 모든 NaN을 quiet인 것처럼 취급하는 거예요.

더 알아보기

  • cmath 모듈 — 이 함수들 대부분의 복소수 버전.
  • numbers — 숫자 추상 베이스 클래스.