기타/컴퓨터공학

float형 연산하고나서 오차나는이유가 뭔지알려주세요

바로이순간 2012. 7. 2. 08:50

안녕하세요

 float형 변수 324.1234*10000을 하고 float형 으로출력하면

3241234.25000

이 나오는데요 여기서 왜 0.25가 된건지 알려주시면 감사드릴게요..

------------------------------------------------------------------

부동소수점 float형은 32비트를 사용합니다.

그중 1비트는 부호이고

8비트는 지수부분입니다. 2의 126승 부터 2의 -126승 까지를 나타냅니다.

23비트는 유효수자 부분입니다.

 

이렇게 하는 이유는 10의 -38승 같이 아주 작은수나

10의 38승 같이 아주 큰수를 표현하기 위해서 위해서 입니다.

 

그러다 보니까 유효수자를 나타내기 위해서는 23비트만 사용합니다.

(실제로는 24비트 - 소수점이하에서 맨앞의 비트가 항상 앞에 오도록 이동한다음 1을 생략합니다.)

 

23비트, 또는 24비트로 나타낼수 있는 10진수의 자리수는 6.9자리만 정확하게 나타낼수 있습니다.

그 보다 넘치는 경우 - 위의 경우에는 7자리가 됩니다.- 에는 최대한 가깝게 나타낼려고 합니다.

 

그러다 보면 조금 작을 수도 있고, 조금 클수도 있습니다.

 

가령 2진소수 4비트로 나타낼수 있는

10진 소수는 0.5,  0.25,  0.125,  0.0625의 네가지를 조합하는 것만 가능합니다.

 

그런데 0.1(10진수)을 위의 네가지 조합을 가지고 최대한 가까이 나타낼려면

0.125로 나타내는 수 밖에 없읍니다.

 

이때 누군가가

왜 0.1을 0.125로 나타내느냐?

0.025는 어디서 왔느냐? 하고 질문을 하면 위와 같이 답을 할수 밖에 없습니다.