dayun1010   6년 전

min과 max사이의 개수를 일단 구하고

max-min+1

에다가 제곱인 수의 개수를 빼서 결과값을 출력할려고했거든요..

루트를 써서 int형으로 받았을때와 double 형으로 받았을때 값이 똑같으면 제곱인거니까 똑같지 않을 때는 짤린거니까 +1 해서 그 다음 수부터 셀수있게 했구요. 그렇게 잡은 제곱수의 개수는 j-i+1

따라서 max-min+1-(j-i+1)=max-min-j+i 를 출력하면 맞겠다 생각했는데..테스트 케이스는 맞는뎅 어느부분에서 틀린걸까요...

kyhdudgns113   6년 전

M 은 64비트 정수이고, double 자료형은 64비트 실수이네요.
원래 sqrt함수는 인자값으로 double 을 받아오는데
double 같은 경우는 가수부분이 52비트, 지수부분이 11비트입니다. 그래서 32비트인 int 형 정수를 받는데는 아무런 지장이 없죠. 52비트나 되는 가수 부분에 32비트 정수를 그대로 넣으면 되니까요.
하지만 64비트 정수를 받을때는 이를 지표 가수로 바꾸는 과정에서 에러가 납니다. 64비트 정수에서 60번째 즈음의 비트에 수가 있다면, 가수가 52비트 밖에 되지 않으므로, 높은 번째의 비트부터 채우다 보면 낮은 번째의 비트의 수가 사라집니다. 그래서 잘못된 수가 전달이 되는 것이고, 따라서 잘못된 결과가 나오는 것입니다.

kyhdudgns113   6년 전

요약하면 long long int 를 double 로 변환하다보면 다른 값이 될 수도 있다는 것입니다.

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