단정도 (Single Precision)

배정도 (Double Precision) 


C언어에서 변수의 자료형을 정해줄 때 다음과 같은 자료형을 사용한다. 

#변수: 어떤 공간에 어떤 값을 저장하기 위한 이름을 가진 공간 
여기서 공간은 좀 더 정확히 얘기하자면 컴퓨터의 메모리를 가리킨다. 
메모리는 컴퓨터의 핵심 구성품 중 하나 
예) 
미션: 컴퓨터에게 두 수를 더할 수 있는 간단한 일을 시켜보자

우리가 암산으로 빨리 해치웠던 덧셈을 하려면 컴퓨터에게 어떻게 명령을 내려야 할까요?
가장 먼저, 덧셈을 하려면 더할 두 개의 숫자가 있어야겠지요
덧셈을 하는 두 수를 위해 각자의 공간을 만들어줘야 해요

컴퓨터에게 두수를 더할거니깐 공간 두개만 만들어 라고 하면
컴퓨터는 공간 A와 공간B를 만듭니다.

그리고 두수를 더한 결과를 저장할 공간 C도 필요하기에 공간 C도 만들어 달라고합니다.

이제 덧셈을 할 수 있는 모든 공간이 만들어졌습니다. 
가장 먼저, 우리가 만들어 놓은 공간 A와 공간 B에 덧셈을 할 두개의 값을 넣어줘야됩니다.
공간A에는 10을,  공간B에는 20을 넣어줘 라고 명령합니다
그리고 공간 A와 공간 B에 담긴 값들을 더해서 공간 C에 넣어줘 라고 명령합니다
자 이렇게 해서 우리는 변수를 활용해서 덧셈을 해봤습니다.
이제 두 수를 더하기 위해서 컴퓨터에게 시켜야 될 일이 이해가 되셨나요?
그리고 변수가 어떤값을 담기 위한 공간이라는 개념이 확실히 와닿나요?
다시 한번 더 반복하면 '변수'는 어떤 값을 저장하기 위한 이름을 가진 공간입니다.
-어떤값: 10,20
-이름: 공간A, 공간B

변수의 특징
- '변수'에 들어간 값은 언제든지 다른 값으로 덮어씌워질 수 있습니다.
실생활에서 '변수'라는 말을 많이 쓰이죠?
"스포츠 경기에서는 날씨가 큰 변수다!" 

변수의 일반적인 의미는 어떤 상황이 변할 수 있는 요인, 또는 수학에서 여러가지 값으로 변할 수 있는 값을 뜻합니다.

프로그래밍에서도 변수는 비슷한 속성을 가지고 있습니다.
우리가 위에서 만든 공간 A와 공간 B에는 각각 10, 20만 들어갈 수 있는 것이 아니라 30도 들어갈 수 있고, 40도 들어갈 수 있습니다.

공간 A와 B에 각각 30과 40을 넣고 더해서 70이라는 결과를 공간 C에 저장할 수 있고,

9와 1을 더해서 10을 저장할 수도 있는거죠
그래서 변수를 쓰면 편리한 것이 변수가 어떤 역할을 할지 내 마음속에 정해두고 이름을 붙이고나면,  새로운 공간을 만들지 않고서 값만 바꾸면 돼요 

상수도 변수라는 것이 있습니다. 한번 저장된 값은 바뀌지 않는 공간이죠
예를들면 파이=3.14 같은게 있습니다.

변수의 종류 (=데이터타입, 자료형)
변수는 어떤 값을 저장하기 위한 공간이라고 했죠? 그러면 어떤 값이라고 하는 것에는 뭐가 있을까요?

10,20,30 같은 자연수가 있을 수도 있고, 
-10,-20,-1000 같은 음수도 있을 수도 있고,
1.1,0.0009.-0.9999 같은 실수도 있겠죠? 또 
A,B,C,D,a,b,c 문자도 됩니다.  게다가
&,%,# 같은 특수문자도 가능합니다.

컴퓨터에서 0과 1로 표현할 수 있는 것들은 모두 변수에 저장될 수 있는 값이 될 수 있습니다.
컴퓨터는 정수,실수,문자 등 각기 다른 종류의 값을 저장할 수 있는 변수의 종류가 있습니다. 
정수용 변수, 문자용 변수, 실수용 변수처럼 다른 종류의 값을 위해 각각 다른 종류의 변수를 가지고 있는 것이죠.

여러 종류가 있지만 대표적으로 정수, 실수, 문자가 있습니다.
정수: -100, -33, 0, 1, 2, 10000 등과 같이 양의 정수, 음의 정수, 0을 가리킵니다. 
실수: 1, 0, 100.444, -12.9와 같이 소수점을 가지는 숫자를 가리킵니다. 
문자: 영어 대소문자와, 특수문자 등을 가리킵니다.

Float fnum = 3.141593f;

double dnum = 3.141592653589393;

Float: 단정밀도(single precision) 32비트
double: 배정밀도(double precision) 64비트
좀더 확장된 long double 도 있지만, 이는 생략 
배경이 되는 IEEE754에 대해 알아보자

IEEE 754 형식

초기에는 부동소수점을 표현하기 위하여 컴퓨터마다 여러 가지 서로 다른 형식을 사용하였으나, 현재는 거의 대부분의 컴퓨터들이 호환성을 위해 미국전기전자공학회(IEEE)에서 표준화한 IEEE 754 형식을 사용하고 있다.

32비트 단정도(single)가 기본이며, 비트 수를 두배 확장했다고해서 64비트 배정도(double)방식도 있다. 


단정도(single precision) 표현방식

단정도를 이해하면 배정도 방식 또한 이해할 수 있기 때문에 단정도 방식으로 설명하고자 한다. 

부호(Sign)

양수와 음수를 판단하는 방법이 제일 쉽다. 가장 왼쪽 비트를 MSB(Most Signficant Bit)라고 하는데 이 비트를 보고 판단하면 된다.
0: 양수
1: 음수

지수(exponent)

단정도 방식에서 지수(exponent)는 8비트로 표현된다. 여기서 간단하게 문제 
1_00001010_000000000000000000

부호/지수/가수 를 보기 좋게 끊어 놓았다. 위와 같은 바이너리 코드가 있다면 지수(exponent)는 몇인가?  정답은 10 (0000_1010) 이다.

가수 (mantissal 혹은 signficant) 

가수는 실질적인 데이터를 의미한다. 부호와 지수가 어떻든 간에 가수만이 의미있는 수를 담당한다. 
이때 정규화(normalized mantissa)라는 스킬이 들어간다. 정규화의 방법은 다음과 같다.

1. 가수를 1.bbb.....b형식으로 표현할 수 있도록 지수를 조정한다.
2. 가수를 표현할 때 bbb.....b만 표현한다 
3. 1은 항상 존재하기 때문에 저장할 필요가 없기 떄문이다. 
4. 단, 숫자 0인 경우에는 가ㅏ수를 모두 0으로 채운다. 

+ Recent posts