본문 바로가기
코딩/과제

과제 0.1 + 1.1 == 1.2 가 False 인 이유

by Song1234 2024. 3. 12.

과제 0.1 + 1.1 == 1.2 가 False 인 이유

 

컴퓨터의 실수 표현 방식

0.1 + 1.1 == 1.2 가 False 인 이유에는 컴퓨터의 실수 표현 방식에 있다

컴퓨터가 실수를 표현하는 방식에는 두가지가 있다.

 

1. 고정 소수점 방식

 

고정소수점은 소수점을 사용하여 고정된 자리수의 소수를 나타내는 것이다.
한정된 메모리에서 부동소수점 방식보다 좁은 범위의 수만 나타낼 수 있다.
출처 - 위키백과

 

 

말 그대로 소수부의 자릿수를 임의적으로 미리 정하여, 고정된 자릿수의 소수를 표현하는 것이다.
큰범위를 표현하기 어렵다는 단점이있다

2. 부동 소수점 방식 (Floating)

 

부동소수점(浮動小數點, floating point)방식은 실수를 컴퓨터상에서 근사하여 표현할 때
소수점 위치를 고정하지 않고 그 위치를 나타내는 수를 따로 적는 것으로,
유효숫자를 나타내는 가수(假數)와 소수점의 위치를 풀이하는 지수(指數)로 나누어 표현한다.
출처 - 위키백과

 

부동 소수점은 하나의 소수를 가수부와 지수부로 나누어 표현하는 방식이다.
부동 소수점 방식은 고정 소수점 방식보다 표현할 수 있는 값의 범위가 넓지만, 정밀도의 문제가 있다.

3. 부동 소수점의 오류

부동소수점은 지수부와 가수부를 나누어 저장하게 되는데 소수의경우
정확하게 2진법으로 변환이 되지않는다.
예를 들어, 십진법에서 1 나누기 3은 0.33333333333333333... 인 무한 소수로 정확하게 떨어지지 않는다.

이와같이 0.1을 2진수로 변환하게 된다면 값이 나누어 떨어지지 않고 0.0001100110011... 로 무한으로 반복되는 현상이 나타나게 된다.
컴퓨터는 하나의 수를 표현하기 위한 메모리의 크기가 제한되어 있기때문에

이를 가장 근사한 값으로 반올림 하여 표현 하기때문에 근소한 오차가 발생하게 된다.

결론

따라서 0.1 + 1.1 을 하게되면 근소한 오차로 인해 1.2000000000000002 가 되어
0.1 + 1.1 == 1.2 는 False 가 된다