부동소수점 계산
x=(−1)s∗(1+Fraction)∗2(Exponent+Bias)
- Bias: single - 127 / Double - 1023
- 비트 자릿수: single - 8, 23 / double - 11, 52
- Single = 32bit = 1+8+23
- Double = 64bit = 1+11+52
예시 문제
-0.75 변환하기
-0.75
= -3/4 // 이진수로 변환하기 쉬운숫자 기준 2의배수 뽑아내기
= -11(2)/2^2
= -11(2) * 2^(-2)
= -1.1(2) * 2^(-1) // Fraction 부분 1.XX로 맞춰주기
= (-1)^1 * 1.1 * 2(-1)
결과
- S = 1
- Fraction = 1 = 10000000000 (11자리)
- Exponent
-1 = Exponent - Bias
-1 = Exponent - 127
Exponent = 126 = 01111110(2)
= 10111111010000000000(2)
덧셈
문제: 1.0110 X 2^3 + 1.1000 X 2^2
1. 2의 진수 맞추기
- 1.0110 X 2^3 + 0.1100 X 2^3
- 더하기
- 1.XX 형태로 맞추기
곱셈
문제: (1.0110 X 2^3) X (1.1100 X 2^2)
1. 따로따로 곱하기
- (1.0110 X 1.1100) X (2^3 X 2^2)
- 10.01101000 X 2^5
- Normalize + Over/Underflow 확인 -> 경우에 따라 반올림
여담...
IEEE754 변환 과정에서 Fraction이 1이 나왔는데 왜 00000001이 아니라 10000000이지? 라는 의문이 들어 삽질을 조금 했다... 개멍청... 1.XXX의 형태라는 것을 너무 중요하게 생각한 나머지 Fraction을 완전히 별개의 값으로 생각해버렸다. 하지만 원래 fraction은 이진법 형태의 소수점 아래 값이라는걸... 잊지마요