출처) YouTube - 부동소수점(+ 실수계산 오차가 생기는 이유) - 얄팍한 코딩사전
컴퓨터는 2진법으로 모든 데이터를 나타낸다.
9.625를 2진법으로 나타내면 다음과 같다.
9 = 2³ + 2² + 2¹ + 2⁰ ⇒ 1001
0.625 =1/2¹ + 1/2² + 1/2³ ⇒ 101
9.625 = 1001.101
1/10을 2진법으로 나타내면 다음과 같다.
1/10은 0.1이므로 소수부분만 나타내면 된다.
1/2¹ + 1/2² + 1/2³ + 1/2⁴ + 1/2⁵ + 1/2⁶ + 1/2⁷ + 1/2⁸ + 1/2⁹ + 1/2¹⁰ + 1/2¹¹ + 1/2¹² + 1/2¹³ …
0.0001100110011…
→ 0.0999755859375…
⇒ 0.1이 아니다!
프로그래밍 언어에서 널리 사용되는 주요 숫자형
int (자바, 파이썬) : 소수점이 없는 정수 데이터를 저장하기 위한 자료형이다. 4byte를 사용한다.
음수 : 2³¹ ~ -1
양수 : 0 ~ 2³¹ -1(0을 양수에 포함시켰기 때문에 숫자 하나가 더많으므로 -1)
위의 int처럼 자바나 파이썬 같은 언어는 byte수를 기준으로 여러 타입을 나눈다.
상황에 따라 적절한 타입을 선택해서 메모리에서 사용되는 비트 수를 절약한다.
⇒ 1bit, 8bit, 23bit에 각각 부호, 지수, 가수를 할당하는 방법이 IEEE 754 표준이다.
이런 식으로 오차가 발생하게 되지만 컴퓨터는 한정된 메모리를 가지고 연산을 해야하므로 최대한 효율적인 활용을 위해 부동소수점 방식을 사용한다.