1. setprecision()
부동 소수점 숫자를 출력할 때 std::cout의 기본 정밀도는 6이다.
그러나 <iomanip> 헤더파일에 정의된 std::setprecision() 함수를 사용해서 cout에서 출력되는 기본 정밀도를 재정의할 수 있다. 아래 코드는 정밀도를 16자리로 설정하는 코드이다.
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
cout << setprecision(16);
float f = 3.33333333333333333333f;
cout << f << endl;
double d = 3.33333333333333333333f;
cout << d << endl;
return 0;
}
두 경우 모두
3.333333333333333 로 16자리가 나와야 할 것 같지만 그렇지 않다.
부동 소수점 자료형의 변수가 가지는 정밀도는 자릿수 크기와 저장되는 특정 값에 따라 달라지기 때문이다.
float 이 가지는 정밀도가 6~9, double 이 가지는 정밀도가 15 ~ 18 로 정밀도 문제에 영향을 미친다.
위의 출력값은 다음과 같았다.
3.333333253860474 (7자리까지 정확히 출력, float)
3.333333333333334 (15자리까지 정확히 출력, double)
따라서 변수가 보유할 수 있는 것보다 더 정밀도가 필요한 부동 소수점 숫자를 표현할 때 주의해야 한다.
2. fixed
setprecision(5)를 사용할 때, 소수점 4자리 이하의 숫자를 출력하면 해당 자릿수까지만 출력한다.
예를 들어,
float a {3.14}
cout << setprecision(5) << a;
의 출력 결과는 3.14 이다.
그러나 만약 고정적으로 소수점 5자리를 출력하고 싶다면
float a {3.14}
cout << setprecision(5) << fixed << a;
fixed 를 사용하면 출력 결과는 3.14000 이다.
'C++' 카테고리의 다른 글
[C++] Type Casting (0) | 2024.01.16 |
---|---|
[C++] boolalpha 사용해서 true/false 출력하기 (0) | 2024.01.16 |
[C++] 고정 너비 변수 (Fixed Width Integers) (0) | 2024.01.16 |
[C++] 조건부 컴파일(Conditional compilation) (0) | 2024.01.15 |
[C++] 헤더파일 작성하기 (0) | 2024.01.15 |