반응형
C언어 절댓값 및 소수점 처리: abs, fabs, ceil, floor, round 완벽 가이드
C언어로 데이터를 처리하다 보면 마이너스 값을 플러스로 바꾸거나, 소수점 이하를 올림/내림해야 하는 경우가 빈번합니다. 오늘은 stdlib.h와 math.h 라이브러리에서 제공하는 핵심 수학 함수들을 정리해 보겠습니다.

1. 절댓값 구하기: 정수는 abs, 실수는 fabs
절댓값을 구할 때는 데이터 타입에 따라 사용하는 함수와 헤더 파일이 다르니 주의해야 합니다.
정수 절댓값 (abs)
- 헤더: <stdlib.h>
- 원형: int abs(int n);
실수 절댓값 (fabs)
- 헤더: <math.h>
- 원형: double fabs(double x);
C
#include <stdio.h>
#include <stdlib.h> // abs용
#include <math.h> // fabs용
int main() {
int i = -10;
double d = -12.34;
printf("정수 절댓값: %d\n", abs(i)); // 10
printf("실수 절댓값: %.2f\n", fabs(d)); // 12.34
return 0;
}
2. 소수점 처리 함수 (올림, 내림, 반올림)
실수 연산에서 정수화할 때 사용하는 세 가지 핵심 함수입니다. 모두 <math.h>를 사용합니다.
| 함수 | 기능 | 예시 (3.14) | 예시 (-3.14) |
| ceil(x) | 올림 (가장 가까운 큰 정수) | 4.0 | -3.0 |
| floor(x) | 내림 (가장 가까운 작은 정수) | 3.0 | -4.0 |
| round(x) | 반올림 (소수점 첫째 자리 기준) | 3.0 | -3.0 |
예제 코드
C
#include <stdio.h>
#include <math.h>
int main() {
double n = 3.5;
double m = -3.5;
printf("ceil(3.5): %.1f, floor(3.5): %.1f, round(3.5): %.1f\n", ceil(n), floor(n), round(n));
// 결과: 4.0, 3.0, 4.0
printf("ceil(-3.5): %.1f, floor(-3.5): %.1f, round(-3.5): %.1f\n", ceil(m), floor(m), round(m));
// 결과: -3.0, -4.0, -4.0
return 0;
}
3. 실무 꿀팁: 특정 소수점 자리에서 반올림하기
round() 함수는 소수점 첫째 자리에서만 반올림합니다. 만약 소수점 셋째 자리에서 반올림하여 둘째 자리까지 나타내고 싶다면 어떻게 해야 할까요?
공식: round(값 * 10^n) / 10^n
C
double value = 12.3456;
// 소수점 둘째 자리까지 반올림 (100을 곱하고 나눔)
double rounded = round(value * 100) / 100.0;
printf("결과: %.2f\n", rounded); // 12.35
4. 주의사항 및 컴파일 팁
- 반환 타입 주의: ceil, floor, round 함수는 모두 double 타입을 반환합니다. 결과값을 int 변수에 담을 때는 명시적으로 형변환((int))을 해주는 것이 좋습니다.
- GCC 컴파일 에러: 리눅스 환경에서 math.h를 사용한다면 컴파일 시 명령어 끝에 -lm을 잊지 마세요!
- gcc main.c -o main -lm
- 음수 처리: floor와 ceil은 음수 영역에서 헷갈리기 쉽습니다. 'floor는 무조건 왼쪽(작은 쪽), ceil은 무조건 오른쪽(큰 쪽)'으로 이동한다고 생각하면 편합니다.
요약 및 정리
- 정수 절댓값은 abs (stdlib.h)
- 실수 절댓값은 fabs (math.h)
- 무조건 큰 쪽으로 정수화는 ceil
- 무조건 작은 쪽으로 정수화는 floor
- 가장 가까운 정수는 round
포스팅이 도움이 되셨다면 하트(♥)와 댓글 부탁드립니다!https://coding-by-head.tistory.com/ - 임베디드 소프트웨어 및 최적화 기법에 대한 전문적인 정보는 'Coding by Head' 블로그에서 계속됩니다.
반응형
'Core Programming > C Standard Library: Resource & Performan' 카테고리의 다른 글
| C언어 시간 포맷팅 완벽 가이드: strftime, localtime, gmtime 활용법 (0) | 2025.02.23 |
|---|---|
| C언어 시간 함수 총정리: time, clock, difftime 사용법과 실행 시간 측정 (0) | 2025.02.22 |
| C언어 삼각함수 완벽 가이드: sin, cos, tan와 각도 변환(Radian) 총정리 (0) | 2025.02.20 |
| C언어 수학 함수 총정리: math.h 사용법과 컴파일 에러(-lm) 해결법 (0) | 2025.02.19 |
| C언어 메모리 관리 완벽 가이드: memcpy, memmove, memset, memcmp 차이점 (0) | 2025.02.18 |