1.1 + 0.1 == 1.2가 false인 이유?

미나·2023년 9월 9일

새로알게된 정보

목록 보기
2/23

* 내용

: 컴퓨터가 숫자 8 저장을 하기위해서 Ram에 저장을 하는데,
저장을 할때 2진법 저장한다.
숫자 8 -> 00001000
그렇다면 소수인 5.125을 저장하려면 어떻게 할까?
32칸의 저장공간(bit)를 마련하고 첫번째 칸에는 부호(+면 0, -면 1)으로 넣고 그외의 칸수에 저장을 한다.

10진수 2진수
0.125 0.001 -> 깔끔
0.1 0.000110011001100 ···
-> 칸에 전부 안들어가서 뒷부분을 컷해서 저장한다.

컷한만큼의 오차가 발생하게 되어 0.1은 0.1로 저장한게 아닌 0.1과 비슷한 값일 뿐이다.

* 해결방법

  1. 정확히 계산하려면 정수로
    5.1 -> 5100으로 계산

  2. 반올림 문법

  • precision = Math.pow(10,precision)
  • Math.eil(num*precision)/precision
  1. double 자료형
    숫자 1개 당 64칸 사용 -> 오차가 많이 줄어든다.
    But, 메모리 용량 2배 필요

0개의 댓글