C++/알고리즘

[실전 압축 알고리즘] - 실수형을 특정 소수점 까지 출력

snowman95 2019. 10. 18. 23:49
728x90
반응형

본 게시글은 실전 기술을 정리해 놓은 '실전 압축' 입니다. 


몇 번째 자리에서 반올림 하여라. 또는 절대/상대 오차가 10^-9까지 허용한다. 
이런식으로 주어지는 문제에서는

반드시 조건에 맞게 출력을 해주어야 합니다.

 


소숫점 9자리 까지 출력한다고 가정하였을 때

printf("%.9lf", a/b); 
cout << fixed << setprecision(9) << a/b; 

 

C++

함수 기능 카운트 방식 출력
#include<iomaip>
setprecision(n)
소수 자릿수 설정 소숫점 n번째가 아니라 
가장 큰 자리수 부터 Count 해서
n번째 까지 출력


(123.23 이면 1부터
Count해서 n번 째)
만약 ( n < 전체 자리수 )
그 다음 자리(n+1번)
에서 반올림


만약 (n >= 전체 자리수)
그대로 출력만 한다.
0으로 채우지 않음
#include<ios>
fixed
고정 부동 소수점 표기법 사용 소수점 뒤의 자리부터
Count하게 된다.
전체 자리수 보다 n이 크면 나머지를 0으로 채운다.

 

#include <iostream>     // std::cout, std::fixed
#include <iomanip>      // std::setprecision

int main () {
  double f =3.14159;
  std::cout << std::setprecision(5) << f << '\n';  // 3.1416
  std::cout << std::setprecision(9) << f << '\n';  // 3.15159
  std::cout << std::fixed;
  std::cout << std::setprecision(5) << f << '\n';  // 3.14159
  std::cout << std::setprecision(9) << f << '\n';  // 3.141590000
  return 0;
}

 

ex) 3.141592

setprecision(5) = 3.1416 
setprecision(6) = 3.14159 
setprecision(7) = 3.141592 
setprecision(8) = 3.141592 

fixed >> setprecision(5) = 3.14159 
fixed >> setprecision(6) = 3.141592 
fixed >> setprecision(7) = 3.1415920 
fixed >> setprecision(8) = 3.14159200 


ex) 33.141592

setprecision(5) = 33.142 
setprecision(6) = 33.1416 
setprecision(7) = 33.14159 
setprecision(8) = 33.141592 

fixed >> setprecision(5) = 33.14159 
fixed >> setprecision(6) = 33.141592 
fixed >> setprecision(7) = 33.1415920 
fixed >> setprecision(8) = 33.14159200 

 

ex) 3.141596

fixed >> setprecision(5) = 3.14160

 

 


정리

 

cout 사용시

n번째 자리 까지 출력해야 한다면 = 절대/상대 오차가 n 이라면

 

1. 정밀도를 위해 float형 대신 double형 쓰세요

2. fixed >> setprecision(숫자); // (꼭 fixed 를 붙여 자리수 넘어가면 0으로 채우도록 해주세요)

 

 


문제

 

A/B
https://www.acmicpc.net/problem/1008

평균
https://www.acmicpc.net/problem/1546

반응형