chiller123   3년 전

타 online judge 사이트에서는 accept 판정을 받았는데... 여기서는 계속 오답 판정이 뜨네요.
test case가 비정상일리는 없는것 같은데... 뭐가 잘못된 것인지 모르겠네요.
절사평균의 경우에는 앞뒤의 수를 제외하고 평균을 구했구요.
보정평균의 경우에는 제외한 그 다음수와(앞), 마지막 수(뒤)를 제외한만큼 배수를 취하고 더하여, 나누었습니다.
main 부분만 올려봅니다. 코드가 문제될 시에는 삭제할게요.

Nada   3년 전

double형의 오차 때문에 오답으로 나오게 되겠네요.

baekjoon   3년 전

이 문제의 데이터는 double을 사용하면 오차가 나게 만들었습니다.

loveljh   3년 전

저는 이런식으로 위에분과 똑같이 구현을 했는데도 정답이 안나오네요... 
혹시 cout이 타입을 바꾸거나 그러나요?...

hihihi   3년 전

아래와 같이 cout으로 할땐 틀려서 위처럼 하니까 맞았어요 !

loveljh   3년 전

뒤에 + 0.00000001 이유가 오차때문에 그런건가요? 
잘몰라서 그러는데 설명 해주실 수 있으신가요? ㅠㅠ

Nada   3년 전


double a = 1.0

if( a ==  1.0 ) 
   printf("not error");
else
   printf("error");

간혹가다 error를 출력하는 경우가 있습니다. 다음과 같은 경우에는 
이유는 a가 0.99999999999999 이거나 a가 1.00000000000000000001일 때 
컴퓨터는 다르게 보기 때문입니다. 

c언어에서 floating point 연산으로 소수를 표현하기 때문에 
(http://en.wikipedia.org/wiki/Floating_point
위와 같은 오차가 발생하게 됩니다. 

따라서 

double a = 1.0

if( fabs( a - 1.0 )  <= ERROR  ) 
   printf("not error");
else
   printf("error");

로 처리합니다. 

ERROR는 0.0000000001 에서 상황에 따라 유동적으로 바꿔 주셔야 겠지요

loveljh   3년 전

아 floating_point 때문이군요... 
제출해도 일단 답이안나와서 보류해놔야겠습니다 

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