round(1234.5)의 결과는 무엇일까

혹시 1235라고 생각했는가? 그렇다면 아마 다음과 같은 과정을 거쳤을 것이다. round는 주어진 실수를 정수로 반올림하는 것이다. 반올림은 가장 가까운 수를 만드는 것이다. 반올림할 자릿수가 0, 1, 2, 3, 4이면 내리고 5, 6, 7, 8, 9이면 올린다. 따라서 1234.5의 5는 올려야 하므로 답은 1235이다. 만약 이렇게 생각했다면 round가 무엇인지 제대로 이해하지 못한 것이다.

round가 무엇인지 알기 위해 우선 round의 정의부터 확실히 해보자. 흔히들 착각하는 것이 ceil은 올림, floor는 내림, round는 반올림이라고 생각하는 것이다. 하지만 round는 반올림이 아니다. Wikipedia에서 말하는 round의 정의는 다음과 같다.

Rounding a numerical value means replacing it by another value that is approximately equal but has a shorter, simpler, or more explicit representation.

round란 것은 반올림이 아니라 근사값을 구하는 것이다. 즉, 반올림을 구하는 것도 round이지만, 올림과 내림도 round고, 12345678 같은 복잡한 분수를 15로 간단하게 표현하는 것도 round이다.

또한, 반드시 일의 자리까지 round 할 필요도 없다. 물론 보통의 round 구현은 실수를 입력받아 정수 근사값을 만든다. 하지만 반드시 이럴 필요는 없다. 경우에 따라서 십의 자릿수 까지 근사값을 만들 수도 있고, 백의 자릿수 까지 근사값을 만들 수도 있다. 즉, round(1234.5)의 답은 1000이 될 수도 있고, 1200이 될 수도 있고, 50 단위로 근사값을 구한다면 1250이 될 수도 있다. 따라서 round를 어떻게 구현했는지 사용하는 라이브러리의 스펙을 확인해봐야 한다.

댓글

이 블로그의 인기 게시물

[C++] enum class - 안전하고 쓰기 쉬운 enum

Log Aggregator 비교 - Scribe, Flume, Fluentd, logstash

RAII는 무엇인가

[Python] cache 데코레이터로 최적화하기

[Web] SpeechSynthesis - TTS API