ecsimsw

Why is 0.1+0.2 not equal to 0.3 in most programming languages? 본문

Why is 0.1+0.2 not equal to 0.3 in most programming languages?

JinHwan Kim 2019. 2. 16. 01:52
- 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을 붙이는 것으로 캐스팅 할 수 있다.


'Computer Science > Software engineering' 카테고리의 다른 글

Name mangling  (0) 2019.05.29
Storage class  (0) 2019.05.29
Scope  (0) 2019.05.29
Binding  (0) 2019.05.29
Argument (인자)와 Parameter (매개변수)는 다르다.  (0) 2019.01.09
Comments