세줄요약
1.값을 저장할 때
확보해야 되는 메모리 공간의 크기를 결정하기 위해서.
2.값을 참조할 때
한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해서.
3. 메모리에서 읽어 들인2진수의 해석 방법
을 결정하기 위해서.
예제 코드 1
var foo = 100
위의 코드가 실행되면 컴퓨터는 숫자타입의 값 100 을 저장하기 위해 메모리 공간을 확보한 후
, 확보된 메모리에 숫자 값 100을 2진수로 저장
한다. 이 때, 값을 저장할 메모리 공간의 크기
를 알아야 한다. 자바스크립트 엔진은 데이터 타입에 따라
정해진 크기의 메모리 공간을 확보한다.
(자바스크립트는 숫자 타입의 값을 생성할 때, 64비트 부동소수점 형식
을 사용한다. 그리고 이 방식은 8바이트로 숫자를 표현
한다)
변수 foo를 통해서
숫자 타입의 값인 100이 저장되어 있는 공간의 주소를 찾을 수 있다. 그렇다면, 컴퓨터는 이 100의 값을 참조 하려면 한 번에 읽어 들여야 할 메모리 공간의 크기
(바이트)를 알아야 한다. 만약 8바이트 단위로 읽지 않으면
값이 변하기 때문이다. 그러므로, 변수에 숫자 타입의 값이 할당
되어 있기 때문에 자바스크립트 엔진은 foo 변수를 숫자 타입으로 인식하고, 8바이트 단위로 저장되며 8바이트 단위로 값을 읽어들인다. 또한 2진수의 해석을 숫자로 해석하게 되는 것이다.
부동소수점(Floating Point)이란?
컴퓨터가 숫자를 표현할 때 사용하는 방식중 하나이다. 컴퓨터는 0 1 두개의 숫자만 인식하기 때문에2진수
로 숫자, 문자 등을 표현해야 한다. 컴퓨터가 부동소수점 방식으로 숫자 100을 표현할 때, 100 이라는 숫자를 2진수로 변환 후정규화
과정이 추가된다.
간단히 말해서 2진수
를 1.xxx * 2^n
으로 변환하는 것이다.
변환하는 방법은 정수 부분에 1만 남을 때
까지 소수점을 왼쪽으로 이동
시키고, 이동한 수
만큼 n
에 넣는다.
예를 들어 111.101
을 정규화하면 1.11101 * 2^2
로 된다.
IEEE
표준에 따르면 부동소수점 방식으로 실수를 저장하는 데는 32비트
, 또는 64비트
가 사용되며 64비트 기준으로 아래 그림과 같은 구조를 가진다.
지금은 간단한 방식만 설명하는 것이므로 자세한 내용은 이 사이트를 참조.
https://jiminish.tistory.com/81
https://gsmesie692.tistory.com/94
결론적으로 이야기하면 컴퓨터는 정확한 실수
표현이 불가능하며, 이를 극복하기 위한 기법 중 하나인 부동소수점을 기법을 사용하는 것이다.