- 
          
          [C++ STL] 소수 관련 함수들C++ STL 2025. 10. 20. 21:53
[소수 지원 자료형]

1. float = 4Byte = 32bit
정밀도 6-7자리
소수점 6자리 이상부터는 반올림 오차가 생길 수 있다.
2. double = 8byte = 64bit
정밀도 15-16자리
소수점 15자리 이상부터는 반올림 오차가 생길 수 있다.
참고로 c++의 cout는 출력 시 보기 좋게 하기 위해 기본적으로 precision이 6자리로 설정되어있다.
따라서 double 값이 아무리 15자리까지 정확해도 default 설정에 따라 6자리 유효숫자만 표현한다.
double의 경우 15자리까지만 정확하기 때문에 precision을 15-16정도까지만 해줘야한다.
float과 double의 차이는 실수값을 저장하기 위해 사용하는 메모리 bit 사이즈에 있다.
float 형은 실수값을 저장하기 위해 32bit (부호 1 + 지수 8 + 소수 23)
double형은 64bit (부호 1 + 지수 11 + 소수 52)를 사용한다.
따라서 double형은 float 형보다 더 정교하고 더 큰 실수값을 저장할 수 있다.
따라서 웬만하면 double 쓰자.
[올림 - ceil]
#include <cmath> ceil(5.1) # 6 ceil(2.8) # 3 ceil(4.0) # 4 ceil(6.9999) # 7소수점 버리고 무조건 올려줌
4.0 처럼 이미 정수이면 즉, 소수점이 없으면 올리지 않음.
[내림 - floor]
#include <cmath> floor(5.1) # 5 floor(2.8) # 2 floor(4.0) # 4 floor(6.9999) # 6ceil의 반대이다.
소수점 버리고 무조건 내려준다.
[반올림 - round]
#include <cmath> round(5.1) # 5 round(2.8) # 3 round(4.0) # 4 round(6.9999) # 7소수 첫번째 자리에서 반올림해준다.
그럼 소수 n번째 자리까지 반올림하려면?
만약 소수점 2번째 자리까지 반올림하려면
100배를 해서 round 함수 적용한 뒤, 다시 나누기 100을 해주면 된다.
소수점 3번째 자리까지 반올림하면
1000배를 해서 round 함수 적용한뒤, 다시 나누기 1000을 해주면 된다.
[소수점 자릿수 고정하기 - fixed << setprecision]
io manipulation 을 지원하는 헤더인 iomanip을 사용해야한다.
cout << fixed << setprecision을 사용하면 소수점을 고정해서 출력할 수 있다.
즉, double인 변수가 값이 4이면 그대로 출력하면 4만 출력되지만,
setprecision(2)로 고정소수점으로 소수점 두번째 자리까지 출력하도록 강제하면 4.00으로 출력된다.
#include <iomanip> double x = 3.1864 # 3.19 cout << fixed << setprecision(2) << double;게다가 setprecision은 자동으로 반올림을 해준다.
'C++ STL' 카테고리의 다른 글
[C++ STL] set vs unordered_set (0) 2024.08.23 [C++ STL] custom comp 구조체 (0) 2024.08.21 [C++ STL] bitset (0) 2023.07.07 [C++ STL] STL 전체 (0) 2023.05.14 [C++ STL] algorithm.h (0) 2023.03.31