프로그래밍/코테 기반 지식

[코지] c++ 소수점 표현

jinkwon.kim 2023. 1. 27. 08:31
728x90
반응형

개요

c++에서 소수점 아래 표현하는 방법을 알아보겠습니다. 

목차 

1. 자료형 범위

2. 소수점을 표현할 수 있는 자료형

3. 수의 표현 방법

자료형 범위

구분 자료형 byte 범위 비고
기본형 void  
문자형 (signed) char 1 byte -128 ~ 127  
unsigned char 1 byte 0 ~ 255  
wchar_t 2 byte 0 ~ 65,535  
정수형 bool 1 byte 0 ~ 1  
(signed) short (int) 2 byte -32,768 ~ 32,767  
unsigned short (int) 4 byte 0 ~ 65,535  
(signed) int 4 byte -2,147,483,648 ~ 2,147,483,647 OS bit 따라다름
unsigned int 4 byte 0 ~ 4,294,967,295  
(signed) long (int) 4 byte -2,147,483,648 ~ 2,147,483,647 OS bit 따라다름
unsigned long (int) 4 byte 0 ~ 4,294,967,295  
__int8 1 byte -128 ~ 127  
__int16 2 byte -32,768 ~ 32,767  
__int32 4 byte -2,147,483,648 ~ 2,147,483,647  
__int64 8 byte -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807  
실수형 float 4 byte 3.4E-38(-3.4*10^38) ~ 3.4E+38(3.4*10^38) (7digits)  
(long) double 8 byte 1.79E-308(-1.79*10^308) ~ 1.79E+308(1.79*10^308) (15digits)  
  * int는 시스템의 기본연산 단위를 사용한다. (16bit=>2byte, 32=>4byte, 64=>4byte)
  * 64bit에서 long형을 8byte로 확장하였다. (16bit=>4byte, 32=>4byte, 64=>8byte)

64bit OS에서 자료형 byte 

소수점을 표현 할 수 있는 자료형

float와 double 자료형은 소수점 이하까지 표현이 가능합니다. 

수의 표현 범위

1. 단순 출력시

자료형 출력 범위 결과
float 소수점 이상 부분 포함 6자리

1 / 3 = 0.333333
300001 / 3 = 100000
double 소수점 이상 부분 포함 6자리 1 / 3 = 0.333333
300001 / 3 = 100000

2. 전체 출력 범위 지정 있을 때

아래와 같이 cout을 설정 시 최대 숫자 표시는 9자리까지만 표시가 됩니다.

std::cout.precision(24);
자료형 출력 범위 결과
float 소수점 이상 부분 포함 최대 9자리 출력

1 / 3 = 0.333333343267440795898438
300001 / 3 = 100000.3359375
double 소수점 이상 부분 포함 최대 9자리 출력 1 / 3 = 0.333333333333333314829616
300001 / 3 = 100000.333333333328482695

여기서 중요한 차이점이 나옵니다. 

float는 7짜리 까지만 정확히 표현가능

double는 16짜리 까지만 정확히 표현가능

3. 수점 이하 출력 범위 지정 있을 때

// 아래 코드의 뜻은 소수점 이하의 출력을 24글자까지 고정하여 출력 하겠다는 의미
std::cout << std::fixed; //소수점 이하 출력을 precision에서 설정한 값까지 보장
std::cout.precision(24);
자료형 출력 범위 결과
float 소수점 이상 부분 포함 최대 9자리 출력

1 / 3 = 0.333333343267440795898438
300001 / 3 = 100000.335937500000000000000000
double 소수점 이상 부분 포함 최대 9자리 출력 1 / 3 = 0.333333333333333314829616
300001 / 3 = 100000.333333333328482694923878

여기서도 역시 

float는 7짜리 까지만 정확히 표현가능

double는 16짜리 까지만 정확히 표현가능

 

4. std::string을 숫자로 변경하는 함수 

stoi = string to int

stof = string to float

stol = string to long

stod = string to double

https://blockdmask.tistory.com/333

정리 

수의 전체 표현 길이 제한은 std::cout.precision();으로 제한합니다. 

여기에 std::cout << fixex;를 하게 되면 소수점 이하의 출력을 std::cout.precision()에서 설정한 만큼 보장하겠다는 의미입니다. 

 

728x90
반응형