컴퓨터가 소수점 연산에 취약한 이유 - goorm-6th-Als/for_study_Algorithm GitHub Wiki
컴퓨터가 Floating Point 연산을 잘 못하는 이유
0.1 x 0.1
이와 같은 연산은 사람에겐 너무나 쉽지만 컴퓨터에겐 어렵다.
이유는?
숫자를 다룰 때, 우리는 10진법을 사용하지만 컴퓨터는 2진법을 사용한다는 것
또한 10진법에서 유한소수지만 2진법에서는 무한소수일 가능성이 존재하다.
소수 0.1.
-
10진법에서 이는 단순한 유한 분수이지만. 이진수(base-2)로 변환하면 무한하고 반복되는 분수이다.
-
소수점 : 0.1
-
바이너리: 0.00011001100110011... (반복)
-
1/10 이라는 소수의 분모에 어떤 수를 곱하더라도 2의 제곱수를 만들 수 없으므로
-
10진법 유한소수 0.1은, 2진법에서는 무한소수이다.
오차발생
컴퓨터가 무한소수를 전부 저장할 순 없으므로 정해진 bit수만큼만 저장하고 나머지는 반올림 이후 버리므로 정확한 계산이 불가능하다.
현재는 ?
10진수 연산을 소프트웨어적으로 구현하거나 오차를 최대한 줄이는 방법을 택하고있다.