소수점 연산 // 반올림

|

/* 본 블로그에, 휴대폰으로 접속시에는 소스가 제대로 보이지 않을 수 있습니다.

소스가 보이지 않을 시에는, 모바일 화면 제일 하단에 있는 '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


And