고정소수점과 부동소수점을 이해하기 위해서는
사람과 컴퓨터의 차이를 알아야한다.
사람은 숫자에 점을 찍으면 한 눈에 바로 소수점을 알아챌 수 있지만
컴퓨터는 그렇지 않다. 멍청하다. 무조건 이분법으로만 이해하는 바보이다.
263 => 100000111
0.3 => 0.01001100110011
테트리스를 쌓는다고 생각해보자.
사람은 263과 0.3이라는 크기를 십진법이라는 블록을 쌓아서 채운다.
컴퓨터는 263과 0.3이라는 크기를 이진법이라는 블록을 쌓아서 채운다.
테트리스에서 쌓는 벽의 높이를 근사치라고 가정한다면
2진법보다 10진법. 10진법보다 60진법으로 더 빨리 근사치의 값으로 채울 수 있을 것이다.
이렇게 이분법으로 이해하는 컴퓨터의 소수점은
부동소수점과 고정소수점으로 나뉜다.
0과 1만 쓰이는 단순한 표현방식에서 부동소수점과 고정소수점을 구별할까?
즉, 이분법밖에 쓸 줄 모르는 컴퓨터는 부동소수점과 고정소수점을 어떻게 구별할까?
이를 위해 바이어스 표현법이 등장했다.
바이어스(Bias)란 이진법을 변형시킨 숫자의 표현 방식이다.
부동소수점에서는 바이어스 표현법이 쓰이지만
고정소수점에서는 바이어스 표현법이 쓰이지 않는다.
고정소수점 : 0 0000000000000001 000000000000000
부동소수점 : 0 01111111 0000000000000000000000
(지수 = 0 + 127(Bias) = 127 (01111111) )
(지수 = 1은 10^0이므로 1의 지수는 0이다. 지수는 자릿수를 의미한다)
컴퓨터의 입장에서 생각해보자.
컴퓨터가 숫자를 고정소수점에서 부동소수점으로 변환하려고 한다.
그 변환하는 과정에 있어서
고정소수점에 없던 바이어스표현법을 작동시키면 된다.
그러면 부동소수점이란 비트를 작동시킬 수 있다.
(이진법. 십진법. 소수점을 모두 쓸 줄 아는 똑똑한 사람의 입장에서는 왜? 귀찮게 바이어스까지 또 다른 표현법을 만들어서 쓰지?라고 생각할 수 있다.)
이와 비슷한 맥락에 있는 또 다른 표현 방식이 있다.
논리회로 Gray Code
한 숫자에서 다음 숫자로 넘어갈때 한 비트만 바뀐다.
언뜻 보면 이진법 바이너리 코드와 비슷해보이지만
Gray Code는 바이어스 표현법처럼
이진법을 변형시킨 숫자의 표현 방식이다.
그레이 코드 Gray Code? (Tistory Blog 나무 숲)
부동소수점 (0.1 + 0.1 === 0.2??) (Velog thms200)
부동소수점에 대한 이해 (Tistory Blog C언어 예술가)
'Doc > 컴퓨터' 카테고리의 다른 글
컴퓨터과학 CS50 2020 Lecture 1 : C (0) | 2022.05.13 |
---|---|
컴퓨터과학 CS50 2020 Lecture 0 : Scratch (0) | 2022.04.29 |
Hardware. Software (0) | 2022.04.15 |
Linux OS. Cloud Shell. CLI(Command Line Interface) (0) | 2022.04.15 |