부동소수점 수의 산술 연산
부동소수점 수의 산술 : 가수와 지수를 분리해서 연산 처리한다.
부동소수점 덧셈과 뺄셈
1) 지수를 같게 조정하고, 덧셈과 뺄셈을 실행한다.
- 즉, 지수가 작은 쪽을 지수가 큰쪽의 수로 조정 한다.
2) 덧셈과 뺄셈을 수행
3) 계산 결과 가수를 정규화 한다.
4) 이에 맞게 지수값 조절
Ex) 1.1100 * 2^4 + 1.1000 * 2^2
--> 1.1000 * 2^2를 0.0110 * 2^4로 변경 한다.
1.1100 * 2^4
+) 0.0110 * 2^4
10.0010 * 2^4 --->결과
이를 정규화 하면
0.1000 * 2^6 가 된다.
혹은 1.0001 * 2^5 가 된다.
부동소수점 곱셈
1) 지수를 같게 조정하지 않는다.
2) 가수끼리 곱한다.
3) 지수기리 더한다.
4) 소수이하 자리는 정해진 자리에서 반올림 한다.
5) 계산 결과 가수를 정규화 한다.
X=mx * 2^a
Y=my * 2^b
X * Y = (mx * my) * 2^(a+b)
Ex) X = 1.000 * 2^(-2) , Y = -1.010 * 2^(-3)
1.000
*) -1.010
-1.010000 --->곱셈 결과
지수부분은 부분만 더하므로
(-2)+(-3) = -5
그러므로
2^(-2) + 2^(-3) = 2^(-5)
최종 계산 결과는
-1.0100 * 2^(-5)
부동소수점 나눗 셈
1) 지수를 같게 조정하지 않는다.
2) 가수끼리 나눈다.
3) 지수끼리 뺀다.
4) 소수이하 자리는 정해진 자리에서 반올림 한다.
5) 계산 결과 가수를 정규화 한다.
X=mx * 2^a
Y=my * 2^b
X / Y = (mx / my) * 2^(a-b)
Ex) X = 1.000 * 2^(-2) , Y = -1.010 * 2^(-1)
1.000 / -1.010 = -0.1101
-0.1101 --->나눗셈 결과
지수부분은 부분만 빼므로로
(-2)-(-1) = -1
그러므로
2^(-2) + 2^(-1) = 2^(-1)
최종 계산 결과는
-0.1101 * 2^(-1)
문제) bias가 127이고 부호 표시가 있는 단정도 부동소수점 계산...
1) 69.6875를 정규화된 2진 부동소수점 수로 나타내보자.
2진수로 변경하면
1000101.1011(2)가 된다.
이를 정규화 하면
1.0001011011(2) * 2^6 가 된다.
기수(base) : 127
가수 : 1.0001011011(2)
지수 : 127 + 6 = 133 (지수가 6이고 Bias가 127이므로...)
133을 7비트 2진수로 바꾸면 10000101(2)가 된다.
0 10000101 000101101100000000000000 이것이 정답이다.
부호 지수 가수
2) - 0.2를 정규화된 2진 부동소수점 수로 나타내보자.
2진수로 변경하면
-0.001100110011(2) 가 된다.
이를 정규화 하면
-1.100110011001100(2) * 2^-3 가 된다.
가수 : -1.100110011001100(2)
지수 : 127 + (-3) = 124 (지수가 -3이고 Bias가 127이므로...)
7비트 2진수로 바꾸면 01111100(2)가 된다.
1 01111100 100110011001100110011001 이것이 정답이다.
부호 지수 가수
3) 0xFC06 0000 을 IEEE754 단정밀도 부동소수점 수로 나타 내보자.
- 교과서에는 연습 문제는 풀리지 않을 정도로 어려운 수치가있는데 신경 끄자....
- 부호와 지수부분을 보면 0xFC가 된다.
- 맨 앞의 부호가 1이므로 음수이다.
- 지수는 0x7D이므로 127-125 =3, -3이 지수이다
- 가수 부분은 0000 01100 00000000 00000000(2)
1 1111101 00000110 00000000 00000000 이다.
부호 지수 가수
1.0000 0110 * 2^ (-3) 이다.
이는 - 0.0010 0000 110 이다. 음수로 알고 계산 한다.
---------------------------------------------------------------------------------
예를 들어 (참고로 보자)
2진수, 1111.111 를 10진수로 바꿀 때 방법이다.
헷갈리지 말고 참고 하도록......
1 * 2^(3 )+ 1 * 2^(2 ) + 1 * 2^(1 ) + 1*2^0 + 1 * 2^(-1) + 1 * 2^(-2) + 1 * 2^(-3)
= 1 * 8 + 1 * 4 + 1 * 2) + 1 * 1 + 1 * 1/2 + 1 * 1/4 + 1 * 1/ 8
= 15.875
---------------------------------------------------------------------------------
따라서 - 0.0010 0000 110 은
= (1 * 2^-3) + (1 * 2^-9) + (1 * 2^-10)
= (1 * 1/8) + (1 * 2^-9) + (1 * 2^-10)
= 0.125 + 0.001953 + 0.000977
= 0.12793 이다
답은 -0.12793
이제 더이상 문제를 내지 않을 것이다.
2009년 10월 20일 새벽 1:59