숫자 표현 방식
부동 소수점
실수를 표현하는 방식
ex. 12.34 = 12.34 * Math.pow(10, 0) = 1.234 * Math.pow(10, 1) = 0.1234 * Math.pow(10, 2) = ...
실수 12.34를 표현할 수 있는 방법이 너무 다양.
하여 가수부 정수 1자리로 표현하도록 고정한 방식.
컴퓨터에서 부동 소수점 표현 방식
1) 부호비트 + 지수 비트 + 유효 자리로 구성되어 있다.
- 부호 비트 : 양수면 0 음수면 1
- 지수 비트 : 정규화 변환 시 n승 이동 시의 n 값.
- 유효 자리 : 소수점 이하
2) 32bit(단정도)인가 64bit(배정도)인가에 따라 각 비트의 수가 달라짐.
- 32bit : 부호비트 (1 bit) + 지수비트(8 bit) + 유효자리(23bit)
- 64bit : 부호비트 (1 bit) + 지수 비트 (11 bit) + 유효 자리 (52 bit)
3) bias (바이어스) : 음의 지수를 저장하지 못하도록 하는데 사용되는 값.
bias = Math.pow(2, n-1) - 1 (n : 지수 비트 수)
예시(32bit로 계산)
15.357
2진수 변환 => 15 = 1111, 0.357 = 010110110110 ...
각 값을 합치면 => 1111.010110110110...
정규화 => 1.111010110110110... * Math.pow(2, 3)
바이어스 계산 => Math.pow(2, 8) - 1 = 127 (32bit에서 지수 비트는 8비트이니깐.)
지수 + 바이어스 => 3 + 127 = 130
부호 연산 => 0
지수 비트의 2진수 변환 => 1000 0010
유효 자리 => 0101 1011 0110 ...
결과 => 0 1000 0010 1110 1011 0110 ...
자바스크립트에서는?
자바스크립트의 숫자에는 정수 실수 구분이 없다.
IEEE754 형식에 따라 js의 숫자는 64bit의 실수로 표현.
부동 소수점 표현 방식에 따라 숫자의 범위는 -(Math.pow(2, 53) - 1 ) ~ (Math.pow(2, 53) - 1)