실수에서는 unsigned 자료형을 지원하지 않은걸로 알고 있었는데 아닌가요? float(4byte), double(8byte), long double(8바이트 이상. 시스템별로 상이함)로 세 가지가 있는걸로 알고 있습니다.
1010번 - 다리 놓기
unsigned long long으로 풀면 계산 과정에 사용하게 되는 30! 이 unsigned long long의 최대 범위(대략 1e19)보다 훨씬 커서 오버플로우가 납니다.
double로 풀면 아주 정확한 값을 저장하지는 못하는 대신에 훨씬 더 넓은 범위의 값을 표현할 수 있기 때문에 결과적으로 오버플로우는 없고 계산 결과가 0.5 이내(반올림 시 정답과 같음)의 오차 범위에도 들어 AC를 받는 것 같습니다.
N, M <= 30 정도에서는 괜찮은 것 같지만 실수형 자료는 오차를 예측하기가 어려워서 dobule을 쓰는 것보다 정수로 풀이하는 다른 방식을 쓰는 것을 권장합니다. (곱셈 없이 C(n, m) = C(n-1, m) + C(n-1, m-1)을 이용하는 등)
댓글을 작성하려면 로그인해야 합니다.
dongwha410 1년 전
아래의 코드는 일단 정답처리가 되는 코드입니다만
double을 unsigned long long 으로 변경하면 틀렸다고 나옵니다.
둘다 8byte로 크기는 같은데 어디서 차이가 나는 건가요?