kms9937   3년 전

c++로 했을때 오차 때문에 계속 틀리는것 같은데(100%에서 틀려요 ㅠㅠ)

c++푸신 분들은 어떤 방법으로 푸신건가요?(힌트조금만 주시면 감사하겠습니다.)

3587jjh   3년 전

정답자중에 c++이 좀 있긴 하네요

eric00513   3년 전

안녕하세요! 본 문제 출제자입니다. 질문하신 내용에 대한 답변을 드리겠습니다.

1. 이 문제는 C++로 해결이 가능합니다.

2. C++에는 큰 수 연산이 기본적으로는 구현이 되어 있지 않기 때문에 오차를 줄여야 합니다. 작성해 주신 코드에는 sqrt 함수를 사용하여 area 값을 계산한 후, area로 R, r을 구하고, 다시 R, r을 사용하여 d, k를 구하기 때문에 오차가 조금 크게 발생합니다. (실수형이므로 발생합니다.)

따라서 area 값을 sqrt를 사용하지 않고 제곱을 한 상태인 s(s - a)(s - b)(s - c)로 저장을 합니다. 그리고, R과 r 또한 제곱을 하여 저장합니다. 이 방식을 사용하면, area, R, r을 출력할 때만 sqrt 함수를 사용하면 되어서 이후 연산들에서 오차가 줄어들게 됩니다. d와 k를 구할 때는 sqrt 함수를 사용해도 무관합니다.

P.S. 식을 조금 바꾸면 위의 2. 방법이 필요없을 수도 있습니다.

첨부해 주신 소스코드를 2. 의 방법으로 고쳐보니 통과합니다. → https://www.acmicpc.net/source/22841785 (직접 맞았습니다!!를 받으신 후에 보실 수 있습니다.)

감사합니다.

kms9937   3년 전

답변 감사합니다.

실수연산이 어려워서 결국 파이썬으로 해결했지만 

덕분에 c++로 연산의 오차를 줄여서 해결하는 방법도 알게 되었습니다.

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