soph456   7년 전

어떤 경우를 생각하지 못한 걸까요??

jumpingz   7년 전

산술평균값을 구하는 곳에서 틀리는거 같습니다.

일반적으로 %d 는 반올림이 아닌 버림을 수행합니다.
안전하게 반올림을하시려면 반올림 알고리즘(?) 얘를 쓰시는게 좋고
굳이 그럴필요없다면 %.0f 또는 %.0lf 를 사용하셔도됩니다.
참고로 %.xf 및 %.xlf ( x 는 소수점에서 표기하고싶은 자리수 )
예를 들어 12.345 일 때 %.1f 는 12.3 을 의미

즉 %d 는 항상 버림을 수행하며 %.xf 는 반올림을 수행한다.
이상입니다.

 

soph456   7년 전

그렇게 했음에도 틀리는 건 뭘까여

john6014   7년 전

음 어떻게 수정하셧는지는 모르겟습니다만 단순히 %d 에서 %.0f 로 수정하신거라면 그 역시 틀릴 수 밖에 없습니다.

해당 형식문자에 대한 정확한 결과가 나오려면 형식문자에 맞는 변수의 자료형 또한 해당 형식문자에 동일해야 하니까요

즉 %.0f 를 쓰기위해선 (int)(sum / (int)val.size()) 요 변수의 최종 자료형 또한 float 및 double 이 되어야하니까요

제일 정확한 방법은 전체를 float 및 double 로 강제 형변환하는것이 아닌 sum 을 double 또는 float 로 선언하여 해당 값으로 나누는것이 가장 정확합니다.

아래 코드는 몇개를 추가하여 AC 를 받은 코드입니다. ( 수정한 부분은 주석으로 표시해놓았습니다 )


soph456   7년 전

감사합니다!!

댓글을 작성하려면 로그인해야 합니다.