이 글에서는 부동 소수점(floating point) 숫자를 반올림할 수 있는 한 줄짜리 C 함수를 작성하는 방법을 알아보겠습니다. 별도의 조건문 없이 삼항 연산자만으로 간결하게 구현할 수 있습니다.
반올림의 기본 원리
C 표준 라이브러리에는 round() 함수가 존재하지만, 직접 구현해야 하는 상황이라면 다음과 같은 간단한 수학적 원리를 활용할 수 있습니다.
- 반올림할 숫자를 입력받습니다.
- 숫자가 양수라면 0.5를 더합니다.
- 숫자가 음수라면 0.5를 뺍니다.
- 형 변환(typecasting)을 사용하여 부동 소수점 값을 정수로 변환합니다.
정수형으로 형 변환할 때 소수점 이하는 버려지기 때문에, 0.5를 먼저 더하거나 빼면 자연스럽게 반올림 효과를 얻을 수 있습니다.
예제 코드
#include <stdio.h>
int my_round(float number) {
return (int) (number < 0 ? number - 0.5 : number + 0.5);
}
int main() {
printf("Rounding of (2.48): %d\n", my_round(2.48));
printf("Rounding of (-5.79): %d\n", my_round(-5.79));
return 0;
}실행 결과
Rounding of (2.48): 2 Rounding of (-5.79): -6
코드 동작 설명
삼항 연산자 (number < 0 ? number - 0.5 : number + 0.5)가 핵심입니다.
- 양수인 경우: 2.48에 0.5를 더하면 2.98이 되고, 정수형으로 변환되면서 소수점 이하가 잘려 2가 됩니다.
- 음수인 경우: -5.79에서 0.5를 빼면 -6.29가 되고, 형 변환 후 -6이 됩니다.
이처럼 부호에 따라 0.5를 더하거나 빼는 방식으로, 어떤 부동 소수점 값이든 올바르게 반올림된 정수를 반환하는 함수를 단 한 줄로 완성할 수 있습니다.