일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- DirectX
- 프로그래밍
- DirectXTK
- 세팅
- Input Assembler
- 다중표본화
- CommandList
- 다이렉트 초기화
- CPU
- RenderTargetView
- Direct3D Init
- 코딩
- Direct Init
- vertex
- DirectX12
- 다이렉트X
- C++
- 동기화
- Direct3D
- 게임수학
- GPU
- swapchain
- c
- DESC
- engine
- View
- 다이렉트X 튜토리얼
- C언어
- 전처리문
- UE4
- Today
- Total
비타Cpp
C의 기본타입들..(2) 본문
이번에는 실수형을 보겠습니다.
실수형은 '소수점'이 있는 숫자 인데요.
0~1 사이에는 정수의 갯수는 0개 이지만,
실수에서는 무한개의 실수가 존재합니다.
이런 실수를 C에서는 float, double이라는 형태의 변수로 사용 되고 있습니다.
이 실수형 자료형도 역시 크기가 있고 범위가 존재합니다.
float < double
float : 4byte
double : 8byte
자료형의 크기는 보시다시피 정해져있는데 0~1사이에도 무한하게 있는 실수를 어떻게 표현 할 수 있을까요?
그리고 컴퓨터 상에서 실수를 표현하려면 소수점을 표현 해야 하는데,
이 소수점을 표현 할수 있는 방식으로 "고정 소수점" 과 "부동 소수점" 두가지 방식이 있습니다.
일단 C언어에서 쓰이는 방식은 부동소수점입니다.
고정 소수점부터 볼까요?
고정소수점은 말 그대로 소수점을 고정 시켜 자료값을 표현하는 방식입니다.
그림처럼 맨앞 1bit는 음수, 양수인지를 나타내는 부호비트,
그다음 15bit는 정수부분인 정수비트,
마지막으로 남은 16bit를 소수값으로 사용하는 소수비트
이렇게 고정하여 사용하는 방식이 고정 소수점 방식입니다.
하지만 정수부가 15비트로 고정이 되어 있기 때문에 표현할수있는 범위가 그렇게 넓지 못합니다.
그래서 사용하는 방식이 바로
부동 소수점 방식인데요.
얼핏 봤을때는 "부동"이라는것이 "움직이지 않는것"(不動)이라는 뜻으로 보일수도 있지만,
여기서의 의미는 "떠다니면서 움직이는것"(浮動)이라는 뜻입니다.
소수점이 이리저리 떠다닌다 라는 의미입니다.
그러면서 나타낼수 있는 값의 범위는 기하급수 적으로 늘어나게 되는데요.
일단 각 실수형의 범위를 보면,
자료형 | 크기 | 범위 |
float | 4byte | 3.4E+/-38(7개의 자릿수) |
doble | 8byte | 1.7E+/-308(15개의 자릿수) |
범위를 좀 쉽게 설명하자면 38개의 자릿수에서 소수점이 어디든지 왔다리 갔다리하는게 float,
308개의 자릿수에서 소수점이 왔다리 갔다리 하는게 double인것이죠.
하지만 이러한 부동 소수점 방식에는 한가지 큰 문제점이 있습니다.
바로 소수부분의 "신뢰도"가 떨어진다는것이죠.
이런 실수값은 정확한 값이 아니라 근사값을 나타내는 것이기때문에
계산을 하다보면 문제가 생길수 있습니다.
이러한점은 다음에 따로 글을 써보도록 하겠습니다.
'C,C++' 카테고리의 다른 글
조건문 if, if ~ else if ~ else 가위 바위 보 게임 (0) | 2020.04.21 |
---|---|
조건문 if, if ~ else if ~ else (0) | 2019.12.02 |
C의 기본 타입들..(1) (0) | 2019.11.11 |
변수(Variable)와 상수(Constant) - (2) (0) | 2019.10.28 |
변수(Variable)와 상수(Constant) - (1) (0) | 2019.10.23 |