얼마전 퀴즈로 나왔던 부분을 정리한다.
컴퓨터에서 0.1 + 0.1 === 0.2
라 입력하면 True
일까? Flase
일까?
정답은 False
이다.
(실제로 inspection에서 입력하면 true로 나온다.ㅎㅎ)
사람
은 10진법
으로 숫자를 표현하지만,
컴퓨터
는 2진법
으로 숫자를 표현한다.
즉, 1
, 0
으로 모든 것을 받아 들인다.
왜냐하면 컴퓨터는 전기 신호로 모든 데이터를 처리한다.
전기 신호가 on
이면 1
으로,
전기 신호가 off
이면 0
으로 표현한다.
10진법의 숫자를 2진법으로 표현할 때 가장 문제가 되는 부분이 실수
이다.
실수, 즉 0.1, 2.1과 같은 소수점을 2진법으로 정확하게 나타낼 수가 없다.
즉, 2진수로 표현하지 못하는 소수
는 가장 근사치의 값
으로 저장이 된다.
고정 소수점
- 정수를 표현하는 비트 수와 소수를 표현하는 비트 수를 미리 정해 놓고,
해당 비트 만큼만 사용해서 숫자를 표현하는 방식
예를 들어, 263.3이란 실수를 표현하는데 4byte(32bit)를 사용하고,
부호는 1bit, 정수는 16bit, 소수는 15bit를 사용하도록 약속한 시스템이 있다고 하자.
정수인 263을 2진법으로 바꿔서 16bit로 저장하고,
소수인 0.3을 2진법으로 바꿔서 15bit로 저장한다.
즉, 이런 시스템에서는 부호
는 +
이므로 0
이 저장되고,
정수
인 263
은 16bit
를 사용하므로, 0000000100000111
이 저장되고,
소수
인 0.3
은 15bit
를 사용하므로, 010011001100110
으로 저장이 된다..
정수를 표현하는 bit를 늘리면 큰 숫자를 표현할 수 있지만, 정밀한 숫자는 표현이 어렵고,
소수를 표현하는 bit를 늘리면 정밀한 숫자를 표현할 수 있지만, 큰 숫자는 표현이 어렵다.
부동 소수점
- 소수점의 위치를 고정하지 않고 그 위치를 나타내는 수를 따로 적는 것으로,
유효숫자를 나타내는 가수와 소수점의 위치를 풀이하는 지수로 나누어 표현한다.- IEEE 754는 전기 전자 기술자 협회(IEEE)에서 개발한 컴퓨터에서 부동소수점을
표현하는 가장 널리 쓰이는 표준이다.
[출처][위키백과](https://ko.wikipedia.org/wiki/%EB%B6%80%EB%8F%99%EC%86%8C%EC%88%98%EC%A0%90)
−118.625(십진법)를 IEEE 754로 표현해 보자.
음수
이므로, 부호부
는 1
이 된다.
그 다음 절대값
인 118.625
를 이진법
으로 나타내면 1110110.101
이 된다.
소수점
을 왼쪽
으로 이동
시켜, 왼쪽에는 1만 남게 만든다.
즉, 1110110.101 = 1.110110101×2⁶
과 같다.
이것을 정규화된 부동소수점 수
라고 한다.
가수부
는 소수점의 오른쪽
이다. 부족한 비트 수
만큼 0
으로 채운다.
결과
는 11011010100000000000000
이 된다.
지수
는 6
이므로, Bias
를 더해야 한다. *
32비트 IEEE 754 형식
에서 Bias
는 127
이므로 6+127 = 133
이 된다.
이진법
으로 변환하면 10000101
이 된다.
Bias 표현법이라 127을 더하는건데, 자료를 봐도 이해가 안간다..ㅠㅠㅠㅠ
궁금하신 분들은 아래 링크 참고하세요
[참고][부동소수점에 대한 이해 - bias표현법](https://thrillfighter.tistory.com/349)
잘 읽었습니다.
보충하자면
이번 학기에 컴퓨터구조 수업을 듣고 있는데 상당히 어렵네요ㅎㅎ 글쓴이 분도 화이팅!