Math
Math
Math 모듈은 기본적인 삼각함수, 로그·지수 함수, 초월 함수, 그리고 거듭제곱근을 구하는 메서드들을 제공해요.
Math::PI # => 3.141592653589793
Math::E # => 2.718281828459045
Math.sin(0.0) # => 0.0
Math.cos(0.0) # => 1.0
include Math를 하면 더 간단하게 쓸 수 있어요.
include Math
PI # => 3.141592653589793
E # => 2.718281828459045
sin(0.0) # => 0.0
cos(0.0) # => 1.0
출처: Ruby 4.0 API
본문
이 문서의 예시들은 다음을 가정해요. include Math, INFINITY = Float::INFINITY.
메서드들의 정의역(domain)과 치역(range)은 열린 구간과 닫힌 구간으로 표기해요. 열린 구간은 끝점을 포함하지 않고, 닫힌 구간은 포함해요.
- 열린 구간:
(-INFINITY, INFINITY) - 닫힌 구간:
[-1.0, 1.0] - 반열린 구간:
[1.0, INFINITY)
Math 메서드가 돌려주는 값 중 상당수는 수치적 근사값이에요. 수학적으로 무한 정밀도인 값들이 수치 계산에서는 유한 정밀도로 표현되기 때문이죠. 예를 들어 수학에서 cos(π/2)는 정확히 0이지만, 계산에서는 0에 아주 가까운 값이 돼요.
cos(PI/2) # => 6.123031769111886e-17
매우 크거나 작은 반환값에는 가독성을 위해 포맷된 숫자를 함께 넣어뒀어요.
tan(PI/2) # => 1.633123935319537e+16 # 16331239353195370.0
tan(PI) # => -1.2246467991473532e-16 # -0.0000000000000001
Constants
E
오일러 수(e)의 수학 상수 E를 Float로 정의한 값이에요. Math::E로 접근해요.
PI
원주율 PI를 Float로 정의한 값이에요. Math::PI로 접근해요.
Module Functions
acos(x) → float
x의 아크코사인(역코사인)을 돌려줘요. 정의역 [-1, 1], 치역 [0, PI].
acos(-1.0) # => 3.141592653589793 # PI
acos(0.0) # => 1.5707963267948966 # PI/2
acos(1.0) # => 0.0
acosh(x) → float
x의 역쌍곡코사인을 돌려줘요. 정의역 [1, INFINITY], 치역 [0, INFINITY].
acosh(1.0) # => 0.0
acosh(INFINITY) # => Infinity
asin(x) → float
x의 아크사인(역사인)을 돌려줘요. 정의역 [-1, 1], 치역 [-PI/2, PI/2].
asin(-1.0) # => -1.5707963267948966 # -PI/2
asin(0.0) # => 0.0
asin(1.0) # => 1.5707963267948966 # PI/2
asinh(x) → float
x의 역쌍곡사인을 돌려줘요. 정의역·치역 모두 [-INFINITY, INFINITY].
asinh(0.0) # => 0.0
asinh(INFINITY) # => Infinity
atan(x) → Float
x의 아크탄젠트(역탄젠트)를 돌려줘요. 정의역 [-INFINITY, INFINITY], 치역 [-PI/2, PI/2].
atan(0.0) # => 0.0
atan(PI/2) # => 1.0038848218538872
atan(INFINITY) # => 1.5707963267948966 # PI/2
atan2(y, x) → float
y와 x의 아크탄젠트(라디안)를 돌려줘요. 이 방식은 두 인자의 부호를 모두 고려해 사분면이 정확한 각을 돌려줘요. 정의역은 y, x 모두 [-INFINITY, INFINITY], 치역 [-PI, PI].
atan2(-1.0, -1.0) # => -2.356194490192345 # -3*PI/4
atan2(-1.0, 0.0) # => -1.5707963267948966 # -PI/2
atan2(-1.0, 1.0) # => -0.7853981633974483 # -PI/4
atan2(0.0, -1.0) # => 3.141592653589793 # PI
atanh(x) → float
x의 역쌍곡탄젠트를 돌려줘요. 정의역 [-1, 1], 치역 [-INFINITY, INFINITY].
atanh(-1.0) # => -Infinity
atanh(0.0) # => 0.0
atanh(1.0) # => Infinity
cbrt(x) → float
x의 세제곱근을 돌려줘요. 정의역·치역 모두 [-INFINITY, INFINITY]. 음수도 세제곱근을 구할 수 있어요.
cbrt(-27.0) # => -3.0
cbrt(-8.0) # => -2.0
cbrt(0.0) # => 0.0
cbrt(8.0) # => 2.0
cbrt(27.0) # => 3.0
cos(x) → float
x(라디안)의 코사인을 돌려줘요. 정의역 (-INFINITY, INFINITY), 치역 [-1.0, 1.0].
cos(0.0) # => 1.0
cos(PI) # => -1.0
cos(PI/2) # => 6.123031769111886e-17 # 0.0000000000000001
cosh(x) → float
x의 쌍곡코사인을 돌려줘요. 정의역 [-INFINITY, INFINITY], 치역 [1, INFINITY].
cosh(0.0) # => 1.0
cosh(INFINITY) # => Infinity
erf(x) → float
x에 대한 가우스 오차 함수(gauss error function)의 값을 돌려줘요. 정의역 [-INFINITY, INFINITY], 치역 [-1, 1].
erf(-INFINITY) # => -1.0
erf(0.0) # => 0.0
erf(INFINITY) # => 1.0
관련: Math.erfc.
erfc(x) → Float
x에 대한 여오차 함수(complementary error function)의 값을 돌려줘요. 정의역 [-INFINITY, INFINITY], 치역 [0, 2].
erfc(-INFINITY) # => 2.0
erfc(0.0) # => 1.0
erfc(INFINITY) # => 0.0
관련: Math.erf.
exp(x) → float
e의 x제곱을 돌려줘요. 정의역 [-INFINITY, INFINITY], 치역 [0, INFINITY].
exp(0.0) # => 1.0
exp(1.0) # => 2.718281828459045 # E
exp(2.0) # => 7.38905609893065 # E**2
exp(INFINITY) # => Infinity
expm1(x) → float
exp(x) - 1, 즉 e의 x제곱에서 1을 뺀 값을 돌려줘요. 정의역 [-INFINITY, INFINITY], 치역 [-1.0, INFINITY].
expm1(0.0) # => 0.0
expm1(1.0) # => 1.718281828459045 # E - 1
expm1(INFINITY) # => Infinity
frexp(x) → [fraction, exponent]
x를 다음이 성립하도록 정규화된 부호 있는 fraction(float)과 정수 exponent(지수)의 2-요소 배열로 돌려줘요.
x = fraction * 2**exponent
IEEE 754 배정밀도 2진 부동소수점 형식(binary64)을 참고하세요. 정의역·치역 모두 [-INFINITY, INFINITY].
frexp(1.0) # => [0.5, 1]
frexp(2.0) # => [0.5, 2]
관련: Math.ldexp(Math.frexp의 역연산).
gamma(x) → float
x에 대한 감마 함수의 값을 돌려줘요. 정의역은 음의 정수를 제외한 (-INFINITY, INFINITY].
gamma(1.0) # => 1.0
gamma(2.0) # => 1.0
gamma(3.0) # => 2.0
gamma(4.0) # => 6.0
gamma(5.0) # => 24.0
관련: Math.lgamma.
hypot(a, b) → float
sqrt(a**2 + b**2), 즉 다른 두 변의 길이가 a, b인 직각삼각형의 가장 긴 변(빗변) c의 길이를 돌려줘요. 정의역은 a, b 모두 [-INFINITY, INFINITY], 치역 [0, INFINITY].
hypot(3.0, 4.0) # => 5.0
hypot(5.0, 12.0) # => 13.0
hypot(1.0, sqrt(3.0)) # => 1.9999999999999998 # Near 2.0
인자 중 하나라도 INFINITY나 -INFINITY면 결과는 Infinity예요.
ldexp(fraction, exponent) → float
fraction * 2**exponent의 값을 돌려줘요. fraction의 정의역 [0.0, 1.0), exponent의 정의역 [0, 1024](더 큰 값은 1024와 동등).
ldexp(-0.5, 2) # => -2.0
ldexp(0.0, 0) # => 0.0
ldexp(0.5, 2) # => 2.0
관련: Math.frexp(Math.ldexp의 역연산).
lgamma(x) → [float, -1 or 1]
다음과 동등한 2-요소 배열을 돌려줘요.
[Math.log(Math.gamma(x).abs), Math.gamma(x) < 0 ? -1 : 1]
로그 감마 함수를 참고하세요. 첫 요소의 치역은 (-INFINITY, INFINITY], 둘째 요소는 -1 또는 1이에요.
lgamma(1.0) # => [0.0, 1]
lgamma(2.0) # => [0.0, 1]
lgamma(3.0) # => [0.6931471805599436, 1]
관련: Math.gamma.
log(x, base = Math::E) → Float
x의 base를 밑으로 하는 로그를 돌려줘요. base를 생략하면 자연로그(밑 E)예요. 정의역 [0, INFINITY].
log(0.0) # => -Infinity
log(1.0) # => 0.0
log(E) # => 1.0
log(INFINITY)# => Infinity
log(2.0, 2.0) # => 1.0
log(10.0, 10.0) # => 1.0
log10(x) → float
x의 상용로그(밑 10)를 돌려줘요. 정의역 [0, INFINITY].
log10(1.0) # => 0.0
log10(10.0) # => 1.0
log10(INFINITY) # => Infinity
log1p(x) → float
log(x + 1), 즉 (x + 1)의 밑 E 로그를 돌려줘요. 정의역 [-1, INFINITY].
log1p(-1.0) # => -Infinity
log1p(0.0) # => 0.0
log1p(E - 1) # => 1.0
log2(x) → float
x의 밑 2 로그를 돌려줘요. 정의역 [0, INFINITY].
log2(1.0) # => 0.0
log2(2.0) # => 1.0
log2(INFINITY) # => Infinity
sin(x) → float
x(라디안)의 사인을 돌려줘요. 정의역 (-INFINITY, INFINITY), 치역 [-1.0, 1.0].
sin(-PI/2) # => -1.0
sin(0.0) # => 0.0
sin(PI/2) # => 1.0
sinh(x) → float
x의 쌍곡사인을 돌려줘요. 정의역·치역 모두 [-INFINITY, INFINITY].
sinh(0.0) # => 0.0
sinh(INFINITY) # => Infinity
sqrt(x) → float
x의 주(非음수) 제곱근을 돌려줘요. 정의역·치역 모두 [0, INFINITY].
sqrt(0.0) # => 0.0
sqrt(1.0) # => 1.0
sqrt(2.0) # => 1.4142135623730951
sqrt(4.0) # => 2.0
tan(x) → float
x(라디안)의 탄젠트를 돌려줘요. 정의역·치역 모두 (-INFINITY, INFINITY).
tan(0.0) # => 0.0
tan(PI/2) # => 1.633123935319537e+16 # 16331239353195370.0
tanh(x) → float
x의 쌍곡탄젠트를 돌려줘요. 정의역 [-INFINITY, INFINITY], 치역 [-1, 1].
tanh(-INFINITY) # => -1.0
tanh(0.0) # => 0.0
tanh(INFINITY) # => 1.0