ArithmeticError
ArithmeticError
산술 연산이 잘못됐을 때 Elixir가 던지는 예외가 ArithmeticError예요. 숫자를 다루는 연산에서 계산이 성립하지 않는 상황이 생기면 이 예외를 만나게 돼요.
본문
가장 대표적인 경우는 0으로 나누는 경우예요. 정수 나눗셈에서 0으로 나누면 이 예외가 던져져요.
iex> 1 / 0
** (ArithmeticError) bad argument in arithmetic expression
이 예외는 Erlang 가상 머신이 산술 연산에서 잘못된 인자를 만날 때 발생해요. 예를 들어 div/2, rem/2 같은 정수 전용 연산에 정수가 아닌 값을 넘기거나, 0으로 나누는 등의 상황이죠.
ArithmeticError는 문자 그대로 "산술 연산의 인자가 잘못됐다"는 의미의 예외예요. 부동소수점 연산에서는 0으로 나누어도 무한대나 NaN 같은 값이 나와서 이 예외가 나지 않는다는 점도 알아두면 좋아요. 이 예외는 주로 정수 산술 연산에서 발생해요. 실수 계산에서 0으로 나눠도 Erlang/Elixir는 ArithmeticError 대신 IEEE 754 규칙을 따라 infinity 같은 값을 돌려주죠.
만약 여러분이 만든 함수에서 수학적으로 성립하지 않는 산술 연산을 만났을 때 호출자에게 알리고 싶다면, 이 예외를 직접 던져서 같은 규약을 따르는 것도 자연스러워요.
def factorial(n) when n < 0 do
raise ArithmeticError, message: "factorial is not defined for negative numbers"
end
더 알아보기
- Kernel.div/2: 정수 나눗셈 함수
- Kernel.rem/2: 정수 나머지 함수
- Float 모듈: 부동소수점 연산
- API Reference: 다른 내장 예외 목록