/* 본 블로그에, 휴대폰으로 접속시에는 소스가 제대로 보이지 않을 수 있습니다.
소스가 보이지 않을 시에는, 모바일 화면 제일 하단에 있는 'PC화면' 을 클릭해 들어가서 PC모드로 변경을 하면 소스가 보입니다. *///Error
위 소스는 결과값이 3.000000199999~ 이렇게 나온다.
여기서 아래처럼 소숫점 뒤에 0을 하나 더 추가시키니,
num1=1.00000001;
num2=2.00000001;
결과값이 3.00000002 이렇게 깔끔하게 나왔다.
무엇 때문에 결과값이 다른걸까....
//Why?
컴퓨터는 2진수 부동소수점으로 소수점 이하 자리수를 표현한다. 그 표현의 문제로 인해서, 소수점 이하의 연산에 대해서는 정확도가 100%가 안된다.
우선, 항상 기억해둬야 하는것이 소수점 연산은 항상 오류가 발생한다는 점이다. 0.01 이 표현이 안되기 때문이다.
컴퓨터에서 부동 소수는
(1/2) * n1 + (1/4) * n2 + (1/8) * n3 + (1/16) * n4 ...와 같은 합으로 표현된다. 그리고 0.01은 이런 값의 합으로 표현할 수가 없다.
반면,
2.5 = 2 + 1/2,
2.25 = 2 + 1/4
와 같은 수는 표현이 가능해서 제대로 출력이 된다.
출처 : http://bit.ly/SuYt51
//Solution!
그냥 소수점 반올림을 했다. 하하하하하하하~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//출력결과
result = 3.00000002
result0 = 3.0
result1 = 3.0
result2 = 3.00000002
'Programming > JAVA source ErrorWhySolution' 카테고리의 다른 글
오류: 기본 클래스 xxxx 을(를) 찾거나 로드할 수 없습니다. (1) | 2014.06.11 |
---|