jojls1004   2년 전

틀렸습니다 라고 뜨는데 어떤 반례가 있나요? 찾아보려고 아무거나 넣어보면서 확인 중인데 못 찾겠네요. 혹은 BufferedWriter로 변수를 소수점 세자리까지 나타내는(%.3f) 방법이 있나요?

toonraon   2년 전

평균 구하실 때 for문마다 매번 avr += str[i] / n 을 하는 방식으로 더해서 평균을 구하시는데 이 방법은 사람이 생각하기엔 맞는 방법인데 이는 컴퓨터에서는 틀릴 수 있는 위험한 계산 방식입니다. 그 이유는 컴퓨터는 소수를 부동소수점이라는 방식을 통해 저장을 하기 때문입니다. 소수를 계속해서 더하면 결국 실제 값과 틀린 값이 나옵니다. 부동소수점에 대해 처음 들으신다면 구글에 검색해보시면 여러 블로그에 잘 설명되어있습니다.

아무튼 부동소수점 때문에 아래 반례에서 평균이 43.0이 나와야하는데 질문자님 방식으로는 평균이 42.999가 나와버립니다. 그래서 평균을 넘는 사람이 64, 43, 45 총 3명으로 잘못 집계되어서 50.000%라는 정답이 나옵니다.

그리고 틀렸습니다라고 뜨는 이유와는 관련 없지만 BufferedWriter에서 %.3f를 사용하는 방법은 String.format("%.3f%%", result)를 사용하시면 됩니다.

bw.write(String.format("%.3f%%", result)) 이런 식으로요.

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