- 실수를 정수부와 소수부로 나눔
- 소수부의 자릿수를 미리 정한 후 고정된 자릿수로 표현
- 32비트의 경우 부호 1비트, 정수부 15비트, 소수부 16비트
- 표현할 수 있는 범위가 한정되어 있음
32비트 기준
-1246.375
-> - = 1 (양수: 0, 음수: 1)
-> 1246 = 10011011110(2) (이진수 변환)
-> 0.375 = 0.011(2) (이진수 변환)
-> 1 000010011011110 011000000000000
- 실수를 지수부와 가수부로 나눔
- 2진수로 변환 후 정규화 과정을 거침
- 지수부가 음수가 되지 않도록 bias (2^(지수부 비트 수-1) - 1) 를 이용하여 보정
- 표현할 수 있는 범위는 넓으나, 실제 값과 오차가 발생할 수 있음
- 32비트의 경우 부호 1비트, 지수부 8비트, 가수부 23비트 (float), 64비트의 경우 부호 1비트, 지수부 11비트, 가수부 52비트 (double)
- 자바스크립트의 Number 형은 무조건 배정밀도 64비트 부동 소수점 방식을 사용하고 있음
- (-1)부호*(1+가수)*2지수
32비트 기준
-1246.375
-> 위와 같은 과정을 거치면 -10011011110.011
-> -10011011110.011 = -1.0011011110011 * 2^10 (정규화)
-> 가수부: 0011011110011
-> bias = 127
-> 지수부: 127 + 10 = 137
-> 137 = 10001001(2)
-> 1 10001001 0110111100110000000000
console.log(0.1 + 0.2); // 0.30000000000000004
console.log(0.2 + 0.3); // 0.5