자바에서는 0.1 + 0.2 = 0.3이 아닌 0.30000000000000004가 나온다
이는 부동 소수점 방식을 사용했기 떄문에 발생하는 오차이다.
32비트인 float는 부호 1bit, 지수부 8bit, 가수부 23bit로 표현된다.
0일때 양수, 1일때 음수가 된다.
소수점의 위치를 정한다.
지수부는 8비트여서 0~255를 표현할 수 있고, 소수점을 양쪽으로 움직이기 위해서 가운데인 127을 기준으로 127보다 크면 그 차이만큼 우즉, 낮으면 좌측으로 소수점을 옮긴다.
숫자의 절댓값을 2진수로 표현한뒤 점의 왼쪽에 1자리만 남도록 밀어준다. 이 소수점은 나중에 지수부에서 위치를 다시 찾아 줄 것이다.
이진수로 표현했을 때 무한으로 표현되는 실수들은 반올림을 하기 때문에 오차가 생긴다.
소수점 자릿수 만큼 10을 곱해준 뒤 계산을 하고, 다시 그만큼 10으로 나누어주는 방법이 있다.
소수의 크기가 18자리를 초과한다면 BigDecimal 클래스를 사용하면 된다.
하지만 실행속도가 느려진다는 단점이 있으니 알아두자.