seung_bin   3년 전

제출번호: 26323819

입력: 1 1 1

분모가 0이되어 오류가 나와야하지만 정답으로 처리됩니다

Green55   3년 전

assert로 확인해본 결과 b==c인 데이터는 이미 존재합니다. (26329145)

0으로 나눈다고 꼭 런타임 에러가 뜨는건 아닌 것 같습니다.

amsminn   3년 전

gcc의 경우 0으로 나누는 경우 -inf 또는 inf 가 나오고 

msvc는 내부구현을 보니 switch안에서 divisor가 0이면 break돼서 런타임에러는 발생하지 않습니다

spectaclehong   3년 전

정수 연산에서 0으로 나누면 divide by zero 에러가 뜨는것이 맞습니다.

하지만 위 제출같은 경우에는 O2 옵션 때문에 라인의 시행 순서가 최적화되서 런타임에러가 발생하지 않은것으로 보여요.

https://godbolt.org/z/baKdx5

위 링크에서 -O2 옵션 유무에 따른 어셈블리 차이를 확인할 수 있어요. 보시면 나누기 연산을 하기 전에 비교 후 print 문으로 점프하네요.

O2가 이렇게 최적화 한 이유는 정수 나눗셈 연산이 상대적으로 비싼 연산이라 그런 것 같습니다.

seung_bin   3년 전

그렇군요 감사합니다

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