ArithmeticError

ArithmeticError

산술 연산이 잘못됐을 때 Elixir가 던지는 예외가 ArithmeticError예요. 숫자를 다루는 연산에서 계산이 성립하지 않는 상황이 생기면 이 예외를 만나게 돼요.

출처: ArithmeticError exception

본문

가장 대표적인 경우는 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

더 알아보기