cpp module 02의 주제는 고정소수점을 클래스로 구현하는 것이다.
구현 자체는 그리 어렵지 않고 고정소수점과 부동소수점의 개념을 익히는 것이 중요하다.
처음에 나는 부동이 움직이지 않는다 라는 의미로 이해하고 '그럼 고정과 부동 차이가 대체 뭔가' 했는데 물에 떠서 움직인다는 뜻의 부동이었다.
아니 애초에 우리가 실수형을 처리할 때 사용하는 float 변수가 부동소수점의 원어인 floating point 에서 따온듯 하다.
아무튼 그래서 우리가 사용하는 실수형 변수는 부동소수점을 사용한다.
고정 소수점은 비트 저장시 정수를 표현할 비트와 소수를 저장할 비트가 나뉘어져 있다.
그래서 7.625라는 10진법을 저장하려면, 이진법으로 바꾸었을 때 111.101이 되고 위 사진처럼 정수부 자리에 111을, 소수부 자리에 101을 저장한다.
부동소수점은 지수부와 가수부로 나뉘어진다.
7.625를 이진법으로 변환한 111.101은 1.11101 * 2^2 로 표현할 수도 있는데, 지수부 부분에 2^2를, 가수부 부분에는 소수점 아래에 있는 11101을 저장한다.
그런데 IEEE 표준에 따르면 32비트를 쓰는 경우에는 bias를 127로 지정하고 있다. 이 bias를 지수에 더한 다음 지수부에 넣어야한다. 그래서 최종적으로 지수부에 들어가는 값은 127+2 = 129, 이진법으로 표현하면 10000001이 된다.