Math
Math
기본적인 삼각 함수, 로그 함수, 초월 함수, 그리고 거듭제곱근을 구하는 메서드들을 제공하는 모듈이에요.
출처: Ruby 3.3 API
본문
상수와 메서드 호출은 이렇게 쓸 수 있어요.
Math::PI # => 3.141592653589793
Math::E # => 2.718281828459045
Math.sin(0.0) # => 0.0
Math.cos(0.0) # => 1.0
Math 모듈을 include하면 더 간단한 형태로 쓸 수 있어요.
include Math
PI # => 3.141592653589793
E # => 2.718281828459045
sin(0.0) # => 0.0
cos(0.0) # => 1.0
여기서의 예시들은 단순함을 위해 다음을 가정해요.
include Math
INFINITY = Float::INFINITY
메서드들의 정의역(domain)과 치역(range)은 열린 구간이나 닫힌 구간으로 표기돼요. 각각 괄호거나 대괄호죠.
- 열린 구간(open interval)은 끝점을 포함하지 않아요.
(-INFINITY, INFINITY)
- 닫힌 구간(closed interval)은 끝점을 포함해요.
[-1.0, 1.0]
- 반 열린 구간(half-open interval)은 한 끝점은 포함하고 다른 끝점은 포함하지 않아요.
[1.0, INFINITY)
Math 메서드가 돌려주는 많은 값은 수치적 근삿값이에요. 그런 값들은 수학적으로는 무한한 정밀도를 가지지만, 수치 계산에서는 정밀도가 유한하기 때문이죠.
그래서 수학에서 *cos(π/2)*는 정확히 0이지만, 우리 계산에서 cos(PI/2)는 0에 아주 가까운 수예요.
cos(PI/2) # => 6.123031769111886e-17
매우 크거나 작은 반환 값에는 명확성을 위해 포맷된 숫자를 함께 달아 뒀어요.
tan(PI/2) # => 1.633123935319537e+16 # 16331239353195370.0
tan(PI) # => -1.2246467991473532e-16 # -0.0000000000000001
Ruby의 부동소수점 연산에 영향을 주는 상수들은 Float 클래스를 보세요.
여기에 있는 것들 (What's Here)
삼각 함수 (Trigonometric Functions)
::cos: 주어진 인자의 코사인을 돌려줘요.::sin: 주어진 인자의 사인을 돌려줘요.::tan: 주어진 인자의 탄젠트를 돌려줘요.
역삼각 함수 (Inverse Trigonometric Functions)
::acos: 주어진 인자의 아크코사인을 돌려줘요.::asin: 주어진 인자의 아크사인을 돌려줘요.::atan: 주어진 인자의 아크탄젠트를 돌려줘요.::atan2: 주어진 두 인자의 아크탄젠트를 돌려줘요.
쌍곡 삼각 함수 (Hyperbolic Trigonometric Functions)
::cosh: 주어진 인자의 쌍곡코사인을 돌려줘요.::sinh: 주어진 인자의 쌍곡사인을 돌려줘요.::tanh: 주어진 인자의 쌍곡탄젠트를 돌려줘요.
역쌍곡 삼각 함수 (Inverse Hyperbolic Trigonometric Functions)
::acosh: 주어진 인자의 역쌍곡코사인을 돌려줘요.::asinh: 주어진 인자의 역쌍곡사인을 돌려줘요.::atanh: 주어진 인자의 역쌍곡탄젠트를 돌려줘요.
지수 및 로그 함수 (Exponentiation and Logarithmic Functions)
::exp: 주어진 값을 주어진 거듭제곱으로 올린 값을 돌려줘요.::log: 주어진 값의 주어진 밑(base) 로그를 돌려줘요.::log10: 주어진 인자의 밑 10 로그를 돌려줘요.::log2: 주어진 인자의 밑 2 로그를 돌려줘요.
분수 및 지수 함수 (Fraction and Exponent Functions)
::frexp: 주어진 인자의 분수와 지수를 돌려줘요.::ldexp: 주어진 분수와 지수에 대한 값을 돌려줘요.
거듭제곱근 함수 (Root Functions)
::cbrt: 주어진 인자의 세제곱근을 돌려줘요.::sqrt: 주어진 인자의 제곱근을 돌려줘요.
오차 함수 (Error Functions)
::erf: 주어진 인자에 대한 가우스 오차 함수 값을 돌려줘요.::erfc: 주어진 인자에 대한 상보 오차 함수 값을 돌려줘요.
감마 함수 (Gamma Functions)
::gamma: 주어진 인자에 대한 감마 함수 값을 돌려줘요.::lgamma: 주어진 인자에 대한 로그 감마 함수 값을 돌려줘요.
빗변 함수 (Hypotenuse Function)
::hypot: 주어진a와b에 대해sqrt(a**2 + b**2)을 돌려줘요.
Constants
E
오일러 수(e)의 수학 상수 E를 Float 숫자로 정의한 값이에요.
PI
수학 상수 PI를 Float 숫자로 정의한 값이에요.
Public Class Methods
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] - 치역:
[-INFINITY, INFINITY]
asinh(-INFINITY) # => -Infinity
asinh(0.0) # => 0.0
asinh(INFINITY) # => Infinity
atan(x) → Float
x의 아크탄젠트를 돌려줘요.
- 정의역:
[-INFINITY, INFINITY] - 치역:
[-PI/2, PI/2]
atan(-INFINITY) # => -1.5707963267948966 # -PI2
atan(-PI) # => -1.2626272556789115
atan(-PI/2) # => -1.0038848218538872
atan(0.0) # => 0.0
atan(PI/2) # => 1.0038848218538872
atan(PI) # => 1.2626272556789115
atan(INFINITY) # => 1.5707963267948966 # PI/2
atan2(y, x) → float
y와 x의 아크탄젠트를 라디안으로 돌려줘요.
y의 정의역:[-INFINITY, INFINITY]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] - 치역:
[-INFINITY, INFINITY]
cbrt(-INFINITY) # => -Infinity
cbrt(-27.0) # => -3.0
cbrt(-8.0) # => -2.0
cbrt(-2.0) # => -1.2599210498948732
cbrt(1.0) # => 1.0
cbrt(0.0) # => 0.0
cbrt(2.0) # => 1.2599210498948732
cbrt(8.0) # => 2.0
cbrt(27.0) # => 3.0
cbrt(INFINITY) # => Infinity
cos(x) → float
x의 코사인을 라디안으로 돌려줘요.
- 정의역:
(-INFINITY, INFINITY) - 치역:
[-1.0, 1.0]
cos(-PI) # => -1.0
cos(-PI/2) # => 6.123031769111886e-17 # 0.0000000000000001
cos(0.0) # => 1.0
cos(PI/2) # => 6.123031769111886e-17 # 0.0000000000000001
cos(PI) # => -1.0
cosh(x) → float
x의 쌍곡코사인을 라디안으로 돌려줘요.
- 정의역:
[-INFINITY, INFINITY] - 치역:
[1, INFINITY]
cosh(-INFINITY) # => Infinity
cosh(0.0) # => 1.0
cosh(INFINITY) # => Infinity
erf(x) → float
x에 대한 가우스 오차 함수 값을 돌려줘요.
- 정의역:
[-INFINITY, INFINITY] - 치역:
[-1, 1]
erf(-INFINITY) # => -1.0
erf(0.0) # => 0.0
erf(INFINITY) # => 1.0
관련: Math.erfc.
erfc(x) → Float
x에 대한 상보 오차 함수 값을 돌려줘요.
- 정의역:
[-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(-INFINITY) # => 0.0
exp(-1.0) # => 0.36787944117144233 # 1.0/E
exp(0.0) # => 1.0
exp(0.5) # => 1.6487212707001282 # sqrt(E)
exp(1.0) # => 2.718281828459045 # E
exp(2.0) # => 7.38905609893065 # E**2
exp(INFINITY) # => Infinity
frexp(x) → [fraction, exponent]
x의 정규화된 signed float fraction과 정수 exponent를 담은 2-요소 배열을 돌려줘요. 다음이 성립해요.
x = fraction * 2**exponent
IEEE 754 배정도(double-precision) 이진 부동소수점 형식(binary64)을 참고하세요.
- 정의역:
[-INFINITY, INFINITY] - 치역:
[-INFINITY, INFINITY]
frexp(-INFINITY) # => [-Infinity, -1]
frexp(-2.0) # => [-0.5, 2]
frexp(-1.0) # => [-0.5, 1]
frexp(0.0) # => [0.0, 0]
frexp(1.0) # => [0.5, 1]
frexp(2.0) # => [0.5, 2]
frexp(INFINITY) # => [Infinity, -1]
관련: Math.ldexp (Math.frexp의 역).
gamma(x) → float
x에 대한 감마 함수 값을 돌려줘요.
- 정의역:
(-INFINITY, INFINITY]에서 음의 정수는 제외 - 치역:
[-INFINITY, INFINITY]
gamma(-2.5) # => -0.9453087204829431
gamma(-1.5) # => 2.3632718012073513
gamma(-0.5) # => -3.5449077018110375
gamma(0.0) # => 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의 정의역:[-INFINITY, INFINITY]b의 정의역:[-INFINITY, INFINITY]- 치역:
[0, INFINITY]
hypot(0.0, 1.0) # => 1.0
hypot(1.0, 1.0) # => 1.4142135623730951 # sqrt(2.0)
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와 동등)
IEEE 754 배정도 이진 부동소수점 형식(binary64)을 참고하세요.
ldexp(-INFINITY, -1) # => -Infinity
ldexp(-0.5, 2) # => -2.0
ldexp(-0.5, 1) # => -1.0
ldexp(0.0, 0) # => 0.0
ldexp(-0.5, 1) # => 1.0
ldexp(-0.5, 2) # => 2.0
ldexp(INFINITY, -1) # => Infinity
관련: 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] - 첫 요소의 치역:
(-INFINITY, INFINITY] - 두 번째 요소는 -1 또는 1이에요.
lgamma(-4.0) # => [Infinity, -1]
lgamma(-3.0) # => [Infinity, -1]
lgamma(-2.0) # => [Infinity, -1]
lgamma(-1.0) # => [Infinity, -1]
lgamma(0.0) # => [Infinity, 1]
lgamma(1.0) # => [0.0, 1]
lgamma(2.0) # => [0.0, 1]
lgamma(3.0) # => [0.6931471805599436, 1]
lgamma(4.0) # => [1.7917594692280545, 1]
lgamma(-2.5) # => [-0.05624371649767279, -1]
lgamma(-1.5) # => [0.8600470153764797, 1]
lgamma(-0.5) # => [1.265512123484647, -1]
lgamma(0.5) # => [0.5723649429247004, 1]
lgamma(1.5) # => [-0.12078223763524676, 1]
lgamma(2.5) # => [0.2846828704729205, 1]
관련: Math.gamma.
log(x, base = Math::E) → Float
x의 base 밑 로그를 돌려줘요.
- 정의역:
[0, INFINITY] - 치역:
[-INFINITY, INFINITY]
log(0.0) # => -Infinity
log(1.0) # => 0.0
log(E) # => 1.0
log(INFINITY) # => Infinity
log(0.0, 2.0) # => -Infinity
log(1.0, 2.0) # => 0.0
log(2.0, 2.0) # => 1.0
log(0.0, 10.0) # => -Infinity
log(1.0, 10.0) # => 0.0
log(10.0, 10.0) # => 1.0
log10(x) → float
x의 밑 10 로그를 돌려줘요.
- 정의역:
[0, INFINITY] - 치역:
[-INFINITY, INFINITY]
log10(0.0) # => -Infinity
log10(1.0) # => 0.0
log10(10.0) # => 1.0
log10(INFINITY) # => Infinity
log2(x) → float
x의 밑 2 로그를 돌려줘요.
- 정의역:
[0, INFINITY] - 치역:
[-INFINITY, INFINITY]
log2(0.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) # => -1.2246063538223773e-16 # -0.0000000000000001
sin(-PI/2) # => -1.0
sin(0.0) # => 0.0
sin(PI/2) # => 1.0
sin(PI) # => 1.2246063538223773e-16 # 0.0000000000000001
sinh(x) → float
x의 쌍곡사인을 라디안으로 돌려줘요.
- 정의역:
[-INFINITY, INFINITY] - 치역:
[-INFINITY, INFINITY]
sinh(-INFINITY) # => -Infinity
sinh(0.0) # => 0.0
sinh(INFINITY) # => Infinity
sqrt(x) → float
x의 주(principal, 음이 아닌) 제곱근을 돌려줘요.
- 정의역:
[0, INFINITY] - 치역:
[0, INFINITY]
sqrt(0.0) # => 0.0
sqrt(0.5) # => 0.7071067811865476
sqrt(1.0) # => 1.0
sqrt(2.0) # => 1.4142135623730951
sqrt(4.0) # => 2.0
sqrt(9.0) # => 3.0
sqrt(INFINITY) # => Infinity
tan(x) → float
x의 탄젠트를 라디안으로 돌려줘요.
- 정의역:
(-INFINITY, INFINITY) - 치역:
(-INFINITY, INFINITY)
tan(-PI) # => 1.2246467991473532e-16 # -0.0000000000000001
tan(-PI/2) # => -1.633123935319537e+16 # -16331239353195370.0
tan(0.0) # => 0.0
tan(PI/2) # => 1.633123935319537e+16 # 16331239353195370.0
tan(PI) # => -1.2246467991473532e-16 # -0.0000000000000001
tanh(x) → float
x의 쌍곡탄젠트를 라디안으로 돌려줘요.
- 정의역:
[-INFINITY, INFINITY] - 치역:
[-1, 1]
tanh(-INFINITY) # => -1.0
tanh(0.0) # => 0.0
tanh(INFINITY) # => 1.0
더 알아보기
- Ruby의 부동소수점 연산과 관련 상수는
Float문서를 보세요. Integer#pow,BigDecimal과 같은 다른 수치 계산 도구도 함께 살펴볼 수 있어요.