Core Programming/C Standard Library: Resource & Performan

C언어 절댓값, 올림, 내림, 반올림 함수 완벽 정리 (abs, fabs, ceil, floor)

임베디드 친구 2025. 2. 21. 09:15
반응형

C언어 절댓값 및 소수점 처리: abs, fabs, ceil, floor, round 완벽 가이드

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

Generated by Gemini AI.


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. 주의사항 및 컴파일 팁

  1. 반환 타입 주의: ceil, floor, round 함수는 모두 double 타입을 반환합니다. 결과값을 int 변수에 담을 때는 명시적으로 형변환((int))을 해주는 것이 좋습니다.
  2. GCC 컴파일 에러: 리눅스 환경에서 math.h를 사용한다면 컴파일 시 명령어 끝에 -lm을 잊지 마세요!
    • gcc main.c -o main -lm
  3. 음수 처리: floor와 ceil은 음수 영역에서 헷갈리기 쉽습니다. 'floor는 무조건 왼쪽(작은 쪽), ceil은 무조건 오른쪽(큰 쪽)'으로 이동한다고 생각하면 편합니다.

요약 및 정리

  • 정수 절댓값은 abs (stdlib.h)
  • 실수 절댓값은 fabs (math.h)
  • 무조건 큰 쪽으로 정수화는 ceil
  • 무조건 작은 쪽으로 정수화는 floor
  • 가장 가까운 정수는 round

    포스팅이 도움이 되셨다면 하트(♥)와 댓글 부탁드립니다!https://coding-by-head.tistory.com/
  • 임베디드 소프트웨어 및 최적화 기법에 대한 전문적인 정보는 'Coding by Head' 블로그에서 계속됩니다.
반응형