2015년 7월 6일 월요일

20150706 포인터와 배열 함께 이해하기 / 실수 저장방식(정규화)

int iNum1=0x12345678;
int iNum2=0xABCDEF07;
unsigned char *p;
p = &iNum1;
  ↑
형동등성

포인터를 기준으로 정수형은 경고가 생겨도 자료형이 비슷하면 적용된다!
경고를 해결하기위해 &iNum1 앞에 형변환연산자를 넣어준다.((unsigned char *))

포인터는 메모리를 보는 방식을 결정한다!

사람이 대소를 비교할때 숫자를 왼쪽부터 판단하고 계산을할때는 오른쪽부터 함
계산이 중요하기에 Value값 저장 방식은 1바이트 단위로 뒤에서부터 저장된다.
슈퍼컴퓨터는 논리연산이 중요하기에 Big Endian(엔디안)을 사용한다!

BigEndian
start end
3 4 5 6
12 34 56 78
3 4 5 6
78 56 34 12
end start
little Endian

실수 저장 방식
IEEE 754의 부동 소수점 표현은 크게 세 부분으로 구성되는데, 최상위 비트는 부호를 표시하는 데 사용되며, 지수 부분(exponent)과 가수 부분(fraction/mantissa)이 있다.
  • 먼저, 부호와 지수를 가수로 나누어야 한다.
  • 소수점을 왼쪽으로 이동시켜, 왼쪽에는 1만 남게 만든다. 예를 들면                 101.01 = 1.0101x2² 과 같다. 이것을 정규화된 부동소수점 수라고 한다.
  • 가수부는 소수점의 오른쪽 부분으로, 부족한 비트 수 부분만큼 0으로 채워 23비트로 만든다. 결과는 1010 1000 0000 0000 0000 0000이 된다.
  • 지수는 2이므로, Bias를 더해야 한다. 32비트 IEEE 754 형식에서는 Bias는 127이므로 2+127 = 129이 된다. 이진법으로 변환하면 1000 0001이 된다.
  • General floating point ko.svg

5.25를 2진수로
101.01 -> 1.0101x2²(정규화된 부동소수점 수)

 0.25
x   2
------
 0.5<--0.5의 앞자리 0
x  2
------
 1.0<-1.0의 앞자리 1

절대값 부호방식(Magnitude)

예제
−118.625 (십진법)을 IEEE 754 (32비트 단정도)로 표현해 보자.
  • 먼저, 부호와 지수를 가수로 나누어야 한다.
  • 음수이므로, 부호부는 1이 된다.
  • 그 다음, 절댓값을 이진법으로 나타내면 1110110.101이 된다. (이진기수법을 참조)
  • 소수점을 왼쪽으로 이동시켜, 왼쪽에는 1만 남게 만든다. 예를 들면 1110110.101=1.110110101×2⁶ 과 같다. 이것을 정규화된 부동소수점 수라고 한다.
  • 가수부는 소수점의 오른쪽 부분으로, 부족한 비트 수 부분만큼 0으로 채워 23비트로 만든다. 결과는 11011010100000000000000이 된다.
  • 지수는 6이므로, Bias를 더해야 한다. 32비트 IEEE 754 형식에서는 Bias는 127이므로 6+127 = 133이 된다. 이진법으로 변환하면 10000101이 된다.

이 결과를 정리해서 표시하면 다음과 같다.

Float point example frac.svg

댓글 없음:

댓글 쓰기