더북(TheBook)

035 나눗셈과 나머지의 버림 계산

 

다음과 같이 나눈다고 가정하자.

double z = (double)222/14;

z는 나눗셈의 결과인 15.85로 초기화되는데, 이 문제에서는 나눗셈의 몫을 버림한 15(대수 몫(algebraic quotient)보다 작거나 같은 가장 큰 정숫값)를 얻고자 한다. 한 가지 해법으로서 Math.floor(15.85)로 원하는 결과인 15를 얻을 수 있다.

하지만 22214는 정수이므로 위 나눗셈을 다음과 같이 작성해보자.

int z = 222/14;

이렇게 하면 정확히 원하던 결과인 15가 나온다(/ 연산자는 0에 가장 가까운 정수를 반환한다). Math.floor(z)가 없어도 된다. 게다가 제수가 0이면 222/0ArithmeticException을 던진다.

지금까지의 결론은 부호가 같은 두 정수(둘 다 양수 혹은 둘 다 음수)의 나눗셈의 버림을 / 연산자로 구할 수 있다는 것이다.

지금까지는 좋았지만 다음 두 정수를 가정해보자(부호가 서로 반대다. 즉, 피제수가 음수이고 제수가 양수이거나 혹은 그 반대다).

double z = (double) -222/14;

이번에는 z-15.85다. 앞선 예제처럼 Math.floor(z)를 쓰면 올바른 결과인 -16(대수 몫보다 작거나 같은 가장 큰 정숫값)이 나온다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.