수학 함수
수학 함수 (Mathematical Functions)
math 라이브러리는 수학 상수와 함수를 제공해요. 루아 5.4에서 math 라이브러리의 함수는 루아 정수(lua_Integer)나 루아 실수(lua_Number)를 입력받아 결과를 계산해요.
삼각함수(math.sin 등)는 라디안(radian) 단위를 사용해요. 실수 결과를 만드는 함수는 일반적으로 실수를, 정수로 정확히 표현되는 결과를 만드는 함수는 정수를 반환하려고 해요.
상수 (Constants)
math.pi— 원주율 π.math.huge— 실수 무한대(inf) 값.math.maxinteger— 루아 정수의 최댓값 (2^63 - 1또는 플랫폼에 따라).math.mininteger— 루아 정수의 최솟값 (-2^63).
math.abs
math.abs (x)
x의 절댓값을 반환해요. x가 정수이면 정수 절댓값, 실수이면 실수 절댓값을 반환해요.
math.acos
math.acos (x)
x의 아크코사인을 라디안으로 반환해요 (실수).
math.asin
math.asin (x)
x의 아크사인을 라디안으로 반환해요 (실수).
math.atan
math.atan (y [, x])
y의 아크탄젠트를 라디안으로 반환해요. x가 주어지면 atan(y/x)(4분면 고려)를, 없으면 atan(y)를 반환해요.
math.ceil
math.ceil (x)
x보다 크거나 같은 가장 작은 정수를 반환해요.
print(math.ceil(3.2)) --> 4
print(math.ceil(-3.2)) --> -3
math.cos
math.cos (x)
x의 코사인(라디안)을 반환해요.
math.deg
math.deg (x)
라디안 x를 도(degree)로 변환해요 (x * 180 / pi).
math.exp
math.exp (x)
e^x, 즉 자연지수 함수값을 반환해요.
math.floor
math.floor (x)
x보다 작거나 같은 가장 큰 정수를 반환해요.
print(math.floor(3.8)) --> 3
print(math.floor(-3.2)) --> -4
math.fmod
math.fmod (x, y)
x를 y로 나눈 나머지를 반환해요. % 연산자와 달리 math.fmod는 피연산자의 부호에 따른 부호 규칙을 갖는 C 스타일 나머지예요. (루아의 %는 항상 나누는 수와 같은 부호를 갖는 나머지를 반환해요.)
math.huge
math.huge
실수 무한대를 나타내는 값이에요.
math.log
math.log (x [, base])
x의 로그를 반환해요. base가 주어지면 그 밑의 로그, 없으면 자연로그(ln x)를 반환해요.
print(math.log(8, 2)) --> 3
math.max
math.max (x, ...)
인자 중 가장 큰 값을 반환해요. 비교는 <의 일반 규칙을 따라요.
math.maxinteger
math.maxinteger
정수 타입의 최댓값 상수예요.
math.min
math.min (x, ...)
인자 중 가장 작은 값을 반환해요.
math.mininteger
math.mininteger
정수 타입의 최솟값 상수예요.
math.modf
math.modf (x)
x를 정수 부분과 소수 부분으로 나눠 두 값을 반환해요. 정수 부분과 소수 부분(부호를 가질 수 있음)은 모두 x와 같은 부호예요.
local ip, fp = math.modf(3.75) -- ip=3, fp=0.75
math.pi
math.pi
원주율 π 값이에요.
math.rad
math.rad (x)
도 x를 라디안으로 변환해요 (x * pi / 180).
math.random
math.random ([m [, n]])
의사 난수를 반환해요.
math.random()— [0, 1) 범위의 실수.math.random(m)— 1부터m까지의 정수.math.random(m, n)—m부터n까지의 정수.
math.randomseed로 시드를 설정하면 결정적인 수열을 얻을 수 있어요. 난수 발생기는 미리 정의되어 있어 시드 설정 없이도 사용할 수 있어요.
math.randomseed
math.randomseed ([x [, y]])
의사 난수 발생기를 시드해요. x, y는 정수(또는 변환 가능한 값)예요. 같은 시드로 다시 설정하면 같은 난수 수열을 재생성해요. 두 인자를 주면 더 나은 엔트로피를 제공할 수 있어요. 반환값은 없어요.
math.randomseed(os.time())
math.sin
math.sin (x)
x의 사인(라디안)을 반환해요.
math.sqrt
math.sqrt (x)
x의 제곱근을 반환해요.
math.tan
math.tan (x)
x의 탄젠트(라디안)를 반환해요.
math.tointeger
math.tointeger (x)
값 x를 정수로 변환해 반환해요. x가 정수로 변환 가능한 값(정수, 또는 정수 값과 정확히 같은 실수)이면 그 정수를, 아니면 nil을 반환해요.
print(math.tointeger(3.0)) --> 3
print(math.tointeger(3.5)) --> nil
math.type
math.type (x)
값 x의 "숫자 타입"을 반환해요. 정수면 "integer", 실수면 "float", 숫자가 아니면 nil을 반환해요.
print(math.type(3)) --> integer
print(math.type(3.5)) --> float
print(math.type("3")) --> nil
math.ult
math.ult (m, n)
두 정수 m, n을 부호 없는(unsigned) 정수로 간주하고, m이 n보다 작은지 여부를 boolean으로 반환해요. 부호 없는 비교를 수행해요.
print(math.ult(-1, 1)) --> true (부호 없이 보면 -1은 매우 큰 수)
정수와 실수
math 라이브러리는 정수와 실수를 구분해요. math.floor/math.ceil은 정수 결과를 반환하려 하고, 삼각함수·지수·로그 등은 일반적으로 실수를 반환해요. math.random과 같은 함수는 필요에 따라 정수 또는 실수를 반환해요.
본문
수학 함수 사용 시 주의점
- 삼각함수, 로그, 지수 등은 라디안·실수 규약을 따르고, 입력이 정수면 실수로 승격돼요.
math.random은 시드 없이도 사용 가능하지만, 재현 가능한 수열이 필요하면math.randomseed로 시드를 명시해요.math.tointeger·math.type·math.ult는 루아 5.3+에서 정수/실수 구분을 명확히 다루기 위해 추가된 함수들이에요.math.maxinteger와math.mininteger는 정수 산술의 경계를 검사할 때 유용해요.