Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 수학 함수 완벽 가이드: math 모듈로 삼각함수·로그까지 한 번에

파이썬에서 간단한 사칙연산부터 삼각함수, 로그 계산처럼 복잡한 수학 연산을 수행하려면 math 모듈을 활용하는 것이 좋습니다. math 모듈은 다양한 수학 함수를 제공하며, 모든 함수는 정수 또는 실수 타입 객체에만 동작하고 복소수에는 사용할 수 없다는 점에 유의해야 합니다.

math 모듈을 사용하려면 코드에 먼저 임포트해야 합니다.

import math

주요 상수(Constants)

파이썬에서 계산 시 활용할 수 있는 대표적인 상수는 다음과 같습니다.

상수설명
pi원주율 π 값 반환 (약 3.141592)
e자연로그의 밑 e 값 반환 (약 2.718281)
tautau(τ = 2π) 값 반환 (약 6.283185)
inf무한대(infinity) 값 반환
nan숫자가 아님(Not a Number) 타입

숫자 및 수치 표현 관련 함수

파이썬은 숫자를 다양한 형태로 표현하거나 변환할 수 있는 여러 함수를 제공합니다.

함수설명
ceil(x)x보다 크거나 같은 가장 작은 정수(천장값)를 반환합니다.
copysign(x, y)x의 절댓값에 y의 부호를 붙여 반환합니다.
fabs(x)x의 절댓값을 반환합니다.
factorial(x)x의 팩토리얼을 반환합니다. (단, x ≥ 0)
floor(x)x보다 작거나 같은 가장 큰 정수(바닥값)를 반환합니다.
fsum(iterable)반복 가능한 객체의 요소들을 모두 더한 합계를 반환합니다.
gcd(x, y)x와 y의 최대공약수를 반환합니다.
isfinite(x)x가 무한대도 NaN도 아닌 유한한 수인지 확인합니다.
isinf(x)x가 무한대인지 확인합니다.
isnan(x)x가 숫자가 아닌지(NaN) 확인합니다.
remainder(x, y)x를 y로 나눈 나머지를 반환합니다.

위 수학 함수들의 실제 사용 예제를 살펴보겠습니다.

# math 라이브러리 임포트
import math

# 천장값과 바닥값
print('9.45의 천장값과 바닥값은 각각: ' + str(math.ceil(9.45)) + ', ' + str(math.floor(9.45)))

# 부호 복사
x = 94
y = -27
print('y의 부호를 복사한 후 x의 값은: ' + str(math.copysign(x, y)))

# 절댓값
print('-94와 54의 절댓값은 각각: ' + str(math.fabs(-94)) + ', ' + str(math.fabs(54)))

# fsum과 gcd
my_list = [12, 9.25, 89, 3.02, -75.23, -7.2, 6.3]
print('리스트 요소들의 합: ' + str(math.fsum(my_list)))
print('24와 48의 최대공약수(GCD): ' + str(math.gcd(24, 48)))

# isnan
x = float('nan')
if math.isnan(x):
    print('숫자가 아닙니다(NaN)')
    x = float('inf')

# isinf와 isfinite
if math.isinf(x):
    print('무한대입니다')
print(math.isfinite(x))   # x는 유한한 수가 아님
y = 54
print(math.isfinite(y))   # y는 유한한 수임

실행 결과

9.45의 천장값과 바닥값은 각각: 10, 9
y의 부호를 복사한 후 x의 값은: -94.0
-94와 54의 절댓값은 각각: 94.0, 54.0
리스트 요소들의 합: 37.13999999999999
24와 48의 최대공약수(GCD): 24
숫자가 아닙니다(NaN)
무한대입니다
False
True

거듭제곱 및 로그 함수

이 함수들은 거듭제곱과 로그 관련 계산에 사용됩니다.

함수설명
pow(x, y)x의 y제곱 값을 반환합니다.
sqrt(x)x의 제곱근을 구합니다.
exp(x)e의 x제곱(ex) 값을 구합니다. (e ≈ 2.718281)
log(x[, base])밑을 base로 하는 x의 로그 값을 반환합니다. 기본 밑은 자연로그의 밑 e입니다.
log2(x)밑이 2인 로그 값을 반환합니다.
log10(x)밑이 10인 로그 값을 반환합니다.

거듭제곱·로그 함수 예제

import math
print('2의 5제곱: ' + str(math.pow(2, 5)))
print('625의 제곱근: ' + str(math.sqrt(625)))
print('e의 5제곱: ' + str(math.exp(5)))
print('밑이 5일 때 log(625): ' + str(math.log(625, 5)))
print('밑이 10일 때 log(1024): ' + str(math.log10(1024)))
print('밑이 2일 때 log(1024): ' + str(math.log2(1024)))

실행 결과

2의 5제곱: 32.0
625의 제곱근: 25.0
e의 5제곱: 148.4131591025766
밑이 5일 때 log(625): 4.0
밑이 10일 때 log(1024): 3.010299956639812
밑이 2일 때 log(1024): 10.0

삼각함수 및 각도 변환 함수

다음 함수들은 다양한 삼각함수 연산에 사용됩니다.

함수설명
sin(x)x의 사인(sine) 값을 반환합니다. (라디안 단위)
cos(x)x의 코사인(cosine) 값을 반환합니다. (라디안 단위)
tan(x)x의 탄젠트(tangent) 값을 반환합니다. (라디안 단위)
asin(x)사인의 역함수(아크사인)를 반환합니다. acos, atan도 같은 방식으로 제공됩니다.
degrees(x)라디안 단위의 각도 x를 도(degree) 단위로 변환합니다.
radians(x)도(degree) 단위의 각도 x를 라디안 단위로 변환합니다.

삼각함수 예제

import math
print('sin(45도): ' + str(math.sin(math.radians(45))))
print('cos(pi): ' + str(math.cos(math.pi)))
print('tan(45도): ' + str(math.tan(math.radians(45))))
print('asin(0.7071067811865476)의 각도(도): ' + str(math.degrees(math.asin(0.7071067811865476))))

실행 결과

sin(45도): 0.7071067811865476
cos(pi): -1.0
tan(45도): 0.9999999999999999
asin(0.7071067811865476)의 각도(도): 45.00000000000001

참고: 복소수 연산이 필요하다면?

math 모듈은 복소수를 지원하지 않습니다. 복소수 연산이 필요한 경우에는 별도로 제공되는 cmath 모듈을 사용해야 합니다. 또한 삼각함수 함수들은 입력값을 라디안으로 받기 때문에, 도(degree) 단위의 각도를 다룰 때는 반드시 radians() 함수로 변환한 뒤 전달해야 올바른 결과를 얻을 수 있습니다.