Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어의 trunc(), truncf(), truncl() 함수 완벽 정리

C 언어에는 부동소수점 값에서 소수점 이하를 버리고 정수 부분만 남기는 절삭(truncation) 함수가 세 가지 있습니다. 바로 trunc(), truncf(), truncl()입니다. 이 세 함수는 처리하는 자료형만 다를 뿐 동작 방식은 동일하며, 모두 math.h 헤더 파일에 선언되어 있으므로 사용 전에 반드시 포함해야 합니다(C99 표준에서 도입).

trunc() 함수

trunc() 함수는 double형 인수를 받아 소수점 이하를 버리고 정수 부분만 반환합니다. 단순히 소수 자릿수를 잘라내기 때문에 반올림과 달리 음수라면 0 방향으로 절삭됩니다(예: -53.26 → -53.0). 문법은 다음과 같습니다.

double trunc(double argument)

예제

#include <stdio.h>
#include <math.h>
int main() {
    double a, b, x, y;
    x = 53.26;
    y = 75.86;
    a = trunc(x);
    b = trunc(y);
    printf("a의 값: %lf\n", a);
    printf("b의 값: %lf\n", b);
    return 0;
}

실행 결과

a의 값: 53.000000
b의 값: 75.000000

truncf() 함수

truncf() 함수는 float형 인수를 대상으로 하며, 마찬가지로 소수점 이하를 버리고 정수 부분만 반환합니다. float 변수를 다룰 때 불필요한 자료형 변환 없이 바로 사용할 수 있다는 장점이 있습니다. 문법은 아래와 같습니다.

float truncf(float argument)

예제

#include <stdio.h>
#include <math.h>
int main() {
    float a, b, x, y;
    x = 53.26f;
    y = 75.86f;
    a = truncf(x);
    b = truncf(y);
    printf("a의 값: %f\n", a);
    printf("b의 값: %f\n", b);
    return 0;
}

실행 결과

a의 값: 53.000000
b의 값: 75.000000

truncl() 함수

truncl() 함수도 앞선 두 함수와 동일하게 동작하지만, long double형 인수를 처리한다는 점이 다릅니다. 일반 double보다 넓은 유효 자릿수가 필요한 매우 큰 수나 고정밀 계산 결과를 다룰 때 유용합니다.

문법은 다음과 같습니다.

long double truncl(long double argument)

예제

#include <stdio.h>
#include <math.h>
int main() {
    long double a, b, x, y;
    x = 53547.55555555555L;
    y = 78547.55555555523L;
    a = truncl(x);
    b = truncl(y);
    printf("a의 값: %Lf\n", a);
    printf("b의 값: %Lf\n", b);
    return 0;
}

실행 결과

a의 값: 53547.000000
b의 값: 78547.000000

세 함수 비교 요약

함수인수 및 반환 자료형주요 용도
trunc()double일반적인 배정밀도 실수 절삭
truncf()float단정밀도 실수 절삭
truncl()long double확장 정밀도 실수 절삭

정리하면, 세 함수 모두 소수점 이하를 무조건 버린다는 점에서 floor()(내림)나 round()(반올림)와 구별됩니다. 다루는 변수의 자료형에 맞는 함수를 선택하면 불필요한 형 변환 없이 깔끔하게 절삭 연산을 수행할 수 있습니다.