반올림 관련 질문드립니다..
글쓴이: topofgenius / 작성시간: 월, 2010/11/01 - 5:48오후
환경은
HP - Unix 기반이구요
C 입니다.
printf사용시 문제가 있어서 질문드립니다.
printf("%.0f \n", 10.4);
printf("%.0f \n", 10.5);
printf("%.0f \n", 10.6);
를 출력시.. 결과값이
10
10
11 이 나옵니다.
10.4 와 10.6은 이해가 되는데..
10.5의경우 왜 11이 아니라 10이 나오는지 궁금합니다.
10.51로 했을경우는 11로 나옵니다.
컴파일 옵션으로 잡을 수 있을까요?
VC로 했을경우.. 결과는 11로 잘 나오구요..
Forums:
왜 그렇게 나오는 지
왜 그렇게 나오는 지 원인은 설명해 드릴 수 없습니다만, round 함수를 쓰면 원하는 결과를 얻을 수 있을 겁니다.
--
feel the gravity
feel the gravity
설마 해서 gcc 로
설마 해서 gcc 로 확인해보니까 유효숫자 계산을 따르네요. 10.5를 반올림 하면 10이 되고, 11.5를 반올림 하면 12가 됩니다. 유효숫자에서 유효숫자의 다음 자리가 5인 경우 마지막 유효숫자가 홀수이면 올리고, 짝수이면 버리게 됩니다.
즉, 10.5 에서 일의 자리까지 반올림을 하는데, 5 앞의 숫자가 짝수이므로 버리게 됩니다. 11.5 를 반올림 해보시면 5 앞의 숫자가 홀수 이므로 12로 올려지게 됩니다.
파이썬도 돌려보니까 마찬가지 현상이 나타나네요.
--------blog--------
http://bluekyu.me/
/*** Signature ******************
* blog: http://blog.bluekyu.me/ *
********************************/
결과 보니, Round-to-even방식인것 같네요.
자세한건 아래 링크로
http://haskell.springnote.com/pages/661685
근데 gcc가 언제부터 round-to-even을 도입했지?
헛... round to even 이군요..
감사합니다.
그런데 이걸 해결방법은 없나요?
댓글 달기