GNU C++ vs MS C++ 컴파일 환경에 대해 질문드립니다.

  • wad
    wad

    안녕하세요. Codeforces에서 문제를 풀다가 동적 계획법 문제를 만나서

    종만북의 해법대로 풀었는데요. 컴파일 환경을 MS C++로 제출을 하면

    정답이 나오는데 GNU C++ 로 제출을 하면 정답이 안 나오는 현상이

    발생했습니다. 컴파일 오류는 아니고 특정 테스트 케이스에서

    GNU C++환경이 오답을 내놓는데요. 아무리 코드를 살펴봐도 어떤부분

    에서 컴파일 환경에 따라 차이가 발생할 수 있는지 잘 모르겠습니다..

    한번 보시고 조언해 주시면 정말 감사하겠습니다!

    문제링크
    Accepted된 MS C++환경 submission 링크
    오답처리된 GNU C++환경 submission 링크


    9년 전
2개의 댓글이 있습니다.
  • philosup
    philosup

    환경에 따른것인지 컴파일러 때문인지는 명확하지 않은데요.
    일단 double => int 형변환 때문입니다.

    makeBinary(v, n - 1, sum + (int)pow(10.0, (double)n));

    이부분이요.

    GNU의 경우 (int)형변환이 아무래도 round처리가 아닌 floor처리가 되는 듯하네요.

    결과값에 1e-7정도를 더한후 캐스팅을 하던가. roound함수를 쓰면 됩니다.


    9년 전 link
  • wad
    wad

    감사합니다!! round함수를 추가하였더니 Accept 되었습니다.
    그런데 10.0을 여러번 곱한 값은 소수점 이하자리가 전부 0일 텐데,
    round이냐 floor이냐에 따라 값이 달라지는 이유가 무엇인가요??


    9년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.