vmkfrkwermg   1년 전

처음에 코드를 밑에 적은것 같이 작성했더니 틀렸다고 나오더라고여..

그래서 a = a * (100 - b) / 100;

으로 바뀌니까 맞았다고 뜨네요.

a, b 둘 다 double로 놓아서 데이터 손실도 없을것 같은데 왜 밑에 적은 코드는 오답인가여??


seawon0808   1년 전

a = a * (100 - b) / 100; 의 계산 순서는 * 다음에 / 이므로 /를 먼저하시면 틀립니다.

cubic   1년 전

반례입니다.

유일하게 저 테스트케이스에서 부동소수점의 부정확성 때문에 차이가 생깁니다.

vmkfrkwermg   1년 전

우와 친절한 답변 감사합니다! 

분명 a값은 100으로 출력되는데 값은 1로 나오네요..

왜 if문에서 제대로 걸러지지 않는건가요?

cubic   1년 전

부동소수점 표현의 한계로, 소수를 정확하게 나타내지 못하는 특징 탓에

500 80 으로 만들어진 100이 실제로는 99.999999999999972의 값을 갖더라구요.

소숫점을 크게 잡지 않고 출력하면 반올림이 돼서 출력되기에 100으로 보였던 겁니다.

vmkfrkwermg   1년 전

아하 그렇군여 답변감사합니다!

많이 배웠습니당

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