- quora에서 0.3이 왜 0.2+0.1과 다른 값인지에 대한 질문을 볼 수 있었다. 이는 한마디로 소수를 2진수로 표현하는 정밀도의 문제이다.
-
Precision
- c#에서 (0.3 == 0.1+0.2)는 거짓이다. 그리고 0.2f + 0.1 값을 확인하면 0.300000002980232이다. 이는 소수를 2진수로 표현하는데 있어 분명한 한계가 있기 때문이다.컴퓨터는 계산에 있어 2진수를 사용해야만하고, 0.1과 0.2는 2진수로 정확한 값이 아닌 순환 소수로 절대 표현할 수 없는 수를 자료형에 따른 정밀도로 가져와 연산된다. 이를 다시 10진수로 표현하면 오차가 발생하고 이 때문에 위의 당연한 계산조차 거짓으로 판명되는 것이다.c#에서는 decimal 자료형을 사용하는 것을 통해 이를 해결할 수 있다.(decimal)0.3 == (decimal)0.2+(decimal)0.1 0.3m = 0.2m + 0.1m 위처럼 decimal 타입으로 명시적 형변환을 통해 값 비교를 할 수 있고, 숫자에 접미사 m을 붙이는 것으로 캐스팅 할 수 있다.