루아스크립트(LUA) math 라이브러리 핵심 함수 정리 - math.floor, math.abs ..

개발/lua script1 2026. 1. 2. 08:30

 

Lua 스크립트 math 라이브러리 핵심 함수 정리

 

Lua에서 math 라이브러리는 숫자 계산에 필요한 기본 함수들을 모아둔 표준 라이브러리입니다.

게임 로직, 애니메이션, 확률 처리, 좌표 계산, 데이터 정규화 같은 곳에서 거의 매번 만나게 됩니다.

여기서는 자주 쓰는 핵심 함수 위주로 정리해보겠습니다.

 


 

1) 기본 상수: math.pi, math.huge

 

math.pi

원주율 값입니다. 라디안 기반 각도 계산에서 자주 씁니다.

print(math.pi) -- 3.1415926535898...

 

math.huge

무한대에 가까운 아주 큰 값입니다. “최솟값 초기화” 같은 패턴에서 유용합니다.

local minVal = math.huge
for _, v in ipairs({5, 2, 9}) do
  if v < minVal then minVal = v end
end
print(minVal) -- 2

 


2) 반올림/버림/올림: floor, ceil, modf

 

math.floor(x)

소수점을 버리고 내림합니다.

print(math.floor(3.9))  -- 3
print(math.floor(-3.1)) -- -4 (음수는 더 작은 정수로)

 

math.ceil(x)

올림합니다.

print(math.ceil(3.1))  -- 4
print(math.ceil(-3.9)) -- -3

 

math.modf(x)

정수부와 소수부를 분리해 반환합니다.

local i, f = math.modf(12.34)
print(i, f) -- 12   0.34

 


 

3) 절댓값/부호 관련: abs

 

math.abs(x)

절댓값을 반환합니다.

print(math.abs(-10)) -- 10

 

실무에서는 “거리 비교”, “오차 허용 범위 체크” 같은 곳에서 자주 씁니다.

 


4) 최댓값/최솟값: max, min

 

math.max(a, b, …)

math.min(a, b, …)

print(math.max(3, 10, 7)) -- 10
print(math.min(3, 10, 7)) -- 3

 

리스트(테이블) 전체에 바로 쓰고 싶을 때는 table.unpack 조합을 쓰기도 합니다.

local t = {3, 10, 7}
print(math.max(table.unpack(t)))

 


 

5) 제곱/제곱근/로그/지수: sqrt, log, exp

 

math.sqrt(x)

제곱근입니다.

print(math.sqrt(9)) -- 3

 

math.log(x [, base])

로그입니다. base를 생략하면 자연로그(ln)입니다.

print(math.log(8, 2)) -- 3 (2^3 = 8)
print(math.log(10))   -- ln(10)

 

math.exp(x)

e^x 입니다.

print(math.exp(1)) -- e

 


 

6) 삼각함수: sin, cos, tan, asin, acos, atan

Lua의 삼각함수는 기본이 “라디안”입니다. 각도를 쓰려면 변환이 필요합니다.

 

 

math.rad(deg), math.deg(rad)

도(degree) ↔ 라디안 변환입니다.

local rad = math.rad(90)
print(math.sin(rad)) -- 1에 가까운 값

 

atan은 두 가지 형태가 있습니다

  • math.atan(y)
  • math.atan(y, x) (많이 씁니다: 좌표 기반 각도)
local angle = math.atan(10, 10) -- y=10, x=10
print(math.deg(angle)) -- 45도 근처

 


7) 난수: random, randomseed

 

math.random()

  • math.random() : 0보다 크고 1보다 작은 실수(구현에 따라 다를 수 있음)
  • math.random(n) : 1 ~ n 정수
  • math.random(m, n) : m ~ n 정수
print(math.random())      -- 예: 0.1234...
print(math.random(10))    -- 1~10
print(math.random(5, 15)) -- 5~15

 

math.randomseed(seed)

난수 시드를 설정합니다. 같은 seed면 같은 난수열이 나옵니다.

math.randomseed(os.time())
print(math.random(1, 100))

 

실무 팁으로는 “게임에서 매번 동일한 패턴 방지” 목적이면 os.time() 기반 시드를 한 번만 주는 방식이 일반적입니다. 반대로 “리플레이 재현” 같은 기능이 필요하면 seed를 저장해두고 재사용합니다.

 


 

8) 나머지/정수 나눗셈 관련: fmod

 

math.fmod(a, b)

나머지를 구합니다.

print(math.fmod(10, 3)) -- 1

 

Lua 버전에 따라 % 연산자(모듈로)가 더 자주 쓰이기도 합니다.

print(10 % 3) -- 1

 


9) 각도/좌표/거리 계산에서 자주 나오는 조합 예시

 

(1) 두 점 사이 거리

local function distance(x1, y1, x2, y2)
  local dx = x2 - x1
  local dy = y2 - y1
  return math.sqrt(dx*dx + dy*dy)
end

 

(2) 값 범위 제한(clamp)

math 기본 함수는 clamp가 없어서 보통 이렇게 만듭니다.

local function clamp(x, lo, hi)
  return math.min(math.max(x, lo), hi)
end

print(clamp(120, 0, 100)) -- 100

 

(3) 0~1 정규화

local function normalize(x, minV, maxV)
  return (x - minV) / (maxV - minV)
end

 


 

10) 알아두면 좋은 주의점

  1. 삼각함수는 라디안 기반이라 math.rad, math.deg 변환 습관이 중요합니다.
  2. math.randomseed()는 보통 프로그램 시작 시 1회만 설정합니다.
  3. math.floor, math.ceil음수에서 결과가 직관과 다를 수 있어(내림/올림의 수학적 정의) 데이터 처리에서 특히 주의합니다.

 

 

반응형
admin