13705번 - Ax+Bsin(x)=C
분명히 충분히 큰 정밀도를 잡고 돌리고 있는것 같은데 무슨 문제인지 계속 95% 근처에서 틀리네요...
방법이 아예 잘못된 것인가요??? 예제와 게시판 반례는 다 잘 나오는 것 같습니다 ㅠㅠ
먼저 제가 이 문제를 푼 적이 없어 아무말일 수 있음을 양해바라며...
문제의 포인트는 반올림 과정에 문제가 생기지 않게 하는 것 같은데,
그렇다면 tol을 정해놓고 딱 거기까지 줄여나가는 방법으로는 lo와 hi가 반올림 경계 양쪽에 있을 가능성을 완전히 제거하지 못할 것 같습니다. 대신에 두 점에서 라운드값이 같은가를 종료조건으로 두면 어떨까 싶네요.
(물론 속도는 포기하게 됩니다만...)
설마 10^-60인데 그 사이에 lo와 hi가 들어가는 케이스가 있을까 싶긴 했습니다만, 일단
while round(lo, 6) != round(hi, 6) :
으로 돌렸는데 똑같이 95%에서 틀리네요...ㅠㅠㅠ
그래도 생각지 못한 좋은 포인트를 잡아주신 것 같습니다. 감사합니다 :)
틀리는 원인일지는 모르겠으나 라이브러리를 잘못 사용하고 계십니다. Decimal(0.1)과 Decimal('0.1')을 비교해 보세요.
Decimal(0.1)
Decimal('0.1')
@doju
앗...이게 문제였네요...
감사합니다 ㅠㅠ 라이브러리 사용방법을 제대로 모르고 있었네요.
댓글을 작성하려면 로그인해야 합니다.
gratus907 4년 전
분명히 충분히 큰 정밀도를 잡고 돌리고 있는것 같은데 무슨 문제인지 계속 95% 근처에서 틀리네요...
방법이 아예 잘못된 것인가요??? 예제와 게시판 반례는 다 잘 나오는 것 같습니다 ㅠㅠ