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

C++ 부동 소수점 정밀도 이해하기 – setprecision으로 소수점 자릿수 제어하기

C++에서 부동 소수점(floating point) 숫자는 일반적으로 4바이트(float) 또는 8바이트(double) 크기로 저장됩니다. 따라서 무한히 긴 소수를 모두 담을 수 없고, 제한된 개수의 유효 숫자만 보관할 수 있습니다.

예를 들어 1/3 = 0.333333...처럼 소수점 이하가 무한히 이어지는 수가 있다고 가정해 봅시다. 이 값을 부동 소수점 변수에 저장하면 컴퓨터는 유한한 유효 숫자만 기록합니다. C++의 기본 정밀도(precision)는 유효 숫자 6자리이므로, 별도 설정 없이는 보통 소수점 이하 6자리까지만 표시됩니다.

setprecision으로 정밀도 변경하기

표시되는 정밀도는 setprecision 조작자(manipulator)를 사용해 자유롭게 변경할 수 있습니다. 이 함수는 <iomanip> 헤더 파일에 정의되어 있으며, cout과 함께 사용하면 출력되는 유효 숫자의 개수를 지정할 수 있습니다.

아래 예제 코드를 통해 실제 동작 방식을 확인해 보겠습니다.

예제 코드

#include <iostream>
#include <iomanip>
using namespace std;
int main() {
    double x = 2.3654789d;
    cout << "소수점 이하 3자리까지 출력: " << setprecision(3) << x << endl;
    cout << "소수점 이하 2자리까지 출력: " << setprecision(2) << x << endl;
    cout << "소수점 이하 7자리까지 출력: " << setprecision(7) << x << endl;
}

실행 결과

Print up to 3 decimal places: 2.365
Print up to 2 decimal places: 2.37
Print up to 7 decimal places: 2.3654789

실행 결과 분석

  • setprecision(3): 유효 숫자 3자리만 표시하여 2.365가 출력됩니다.
  • setprecision(2): 유효 숫자 2자리로 반올림되어 2.37이 출력됩니다.
  • setprecision(7): 원래 값의 전체 자릿수인 2.3654789가 그대로 표시됩니다.

추가 팁: fixed와 함께 사용하기

setprecision은 기본적으로 '유효 숫자' 개수를 의미합니다. 만약 소수점 이하 자릿수를 정확히 고정하고 싶다면 <iomanip>fixed 조작자를 함께 사용하면 됩니다.

#include <iostream>
#include <iomanip>
using namespace std;
int main() {
    double x = 2.3654789d;
    cout << fixed << setprecision(3) << x << endl; // 2.365 출력
}

이처럼 C++에서는 부동 소수점의 기본 정밀도 제한을 이해하고, setprecision(필요하다면 fixed)를 적절히 활용함으로써 원하는 형식대로 숫자를 출력할 수 있습니다.