minjun623   6년 전

예제 입력을 입력했을때 float를 쓰면 3.28이 제대로 나오는데 double 을 사용하면 3.27이 나오네요. 왜그런가요?


double을 사용한 코드를 제출 하면 틀렸다고 하네요.

두코드의 다른 점은 double 과 float자료형 뿐인데, double이 유효숫자가 15자리고 float가 유효숫자가 6자리인데 double이 정확도가 더 높은거 아닌가요?

왜  float자료형으로 하면 맞는 코드가 double자료형으로 제출하면 틀리는지 알려주세요.

djm03178   6년 전

사실 이건 좀 복잡한 문제죠. 정확도가 높다고 해서 반올림한 결과가 반드시 더 맞는 방향이 되는 건 아니거든요.

예를 들어 정답이 정확히 3.005가 나와야 할 때 float로 계산한 값이 3.0059이고 double이 3.0049이면 오차는 double이 더 적지만 소수 셋째 자리에서 반올림한 결과는 float가 3.01, double은 3.00으로 오히려 double이 틀린 결과를 가져오죠.

그래서 보통 소수점 계산 결과를 반올림하는 문제에서는 얼마 내의 오차를 허용하도록 스페셜 저지를 하거나 이런 경계값에 걸리는 케이스가 없도록 조정을 해주는데, 그런 고려를 해주지 않았다면 제일 확실한 방법은 실수형을 쓰지 않고 정수형만으로 처리를 하는 거죠. 이 문제도 그게 가능할 거 같네요.

minjun623   6년 전

고맙습니다. 1000곱해서 정수형 해보는 방법도 생각은 했는데 복잡해서 안했는데. 감사합니다.

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