01. 0.1을 100번 더해도 10이 되지 않는다?
•
0.1을 정확하게 저장할 수 없다. 따라서 100번 더해도 10이 되지 않고 오차가 발생한다.
02. 2진수 소수를 10진수로 변환하는 방법은?
•
소숫점 이하의 부분도 정수처럼 자릿수를 곱해서 그 결과를 더하면 된다.
03. 컴퓨터가 계산을 틀리게 하는 이유
•
2진수로 절대 표현할 수 없는 소수들은 근사값으로 표현되므로 정확한 계산이 발생하지 않는 문제가 발생한다.
04. 부동 소수점 수 표현 방법을 알아보자
•
많은 프로그래밍 언어들은 소수를 나타내는 데이터형으로 배정도 부동 소수점 수 및 단정도 부동 소수점 수 두 가지를 제공하고 있다.
◦
배정도 부동 소수점형은 64비트, 단정도 부동 소수점형은 32비트로 소수 전체를 표현한다. C언어에서는 각각 double, float으로 나타난다.
•
이들 데이터 형에서는 소수를 부동 소수점 수로 표현하는 방법을 채택하고 있는데, 부동 소수점 수는 소수를 어떻게 표현할까?
•
일반적으로 부동 소수점 수에서는 소수를 부호, 가수, 기수, 지수의 4개 부분으로 나누어서 나타낸다. 컴퓨터는 2진수를 사용하므로 부호, 가수, 지수의 3개만 포함시켜 부동 소수점 수를 표현한다.
◦
IEEE 표준에 따르면 배정도는 부호, 지수, 가수에 각각 1, 11, 52비트를 단정도는 1, 8, 23비트를 사용한다.
05. 정규 표현과 익세스 표현 마스터하기
•
가수에 사용되는 정규 표현은 다양한 형식으로 표현할 수 있는 부동 소수점 수를 하나로 통일해서 나타내기 위한 방법이다.
◦
0.75를 나타내기 위해 , 와 같이 다양한 표현식이 생길 수 있다.
•
이런 표현 방식들을 하나로 통일한 규칙이 필요했고 소수점 첫 번째 자리는 0이 아닌 값으로 나타낸다라는 규칙을 정했다.
•
2진수에서는 항상 소수점 이상의 값을 1로 고정하는 정규 표현을 사용한다.
⇒ 항상 1임이 보장되므로 비트 하나를 아낄 수 있다. 배정도와 단정도는 각각 53, 24비트를 사용하고 있는 것이다.
•
지수에 사용되는 익세스 표현은 부호 비트를 사용하지 않고 음수를 나타내기 위한 방법이다.
◦
지수부에서 나타날 수 있는 최대값을 반으로 나눈다. 그리고 그 값을 0으로 간주한 후 지수의 부호를 나타내기 위한 별도의 비트를 사용하지 않고 그 자체만으로 부호와 크기를 표현한다.
06. 궁금했던 단정도 부동 소수점 수 표현 방법 찜하기
•
실습
07. 컴퓨터의 계산 실수를 예방하는 두 가지 방법
•
컴퓨터가 계산을 틀리게 하는 원인 중 하나는 내부에서 소수가 부동 소수점 수로 취급되기 때문이다.
•
첫 번째 예방법은 실수를 무시하는 것이다.
◦
프로그램의 목적에 따라 계산 결과의 사소한 오차가 전혀 문제가 되지 않는 경우, 무시할 수 있다.
•
두 번째 예방법은 소수를 정수로 변환한 후 계산하는 것이다.
◦
정수 계산의 범위에서는 절대로 틀리지 않기 때문에 계산할 때만 일시적으로 정수를 사용한 후, 계산 결과는 소수로 변환해서 표시할 수 있다.
•
이 외에도 2진수를 사용해서 10진수를 표현하는 형식으로 BCD가 있다.
◦
이는 4비트를 사용해 0~9의 숫자를 나타내는 방법이다.
•
계산 오차가 되지 않거나 신뢰성이 정말 중요한 프로그램의 경우, 일시적으로 정수를 사용하거나 BCD를 사용하는 방법을 통해서 정확한 값을 얻도록 해야 한다.
08. 뚱뚱한 2진수 대신 날씬한 16진수를 사용하자!
•
2진수는 비트 단위로 데이터를 나타내는 경우 편리하지만 숫자의 크기가 커질 경우, 길이가 너무 길어져 읽기 힘들다는 단점을 가지고 있다.
•
이 때문에 실제 프로그램을 만들 때는 2진수 대신 16진수가 주로 사용된다.