C/ 서로 다른 변수 type간 비교에서 어느 쪽 변수로 기준이 되는지 알고 싶습니다.
int v_max(int x, int y){
int x, int y;
int64_t tex_iter = (int64_t)x*y;
return tex_iter == (int)tex_iter;
}
마지막 라인 비교는 64비트 크기 정수와 32 비트 정수를 비교하는데 이 경우 형태가 큰 쪽에 맞추는 건가요?
64비트 정수와 32비트 정수를 비교할 때 타입을 32비트로 통일하면 64비트 정수의 값이 손실될 수 있지만64비트로 통일해서 비교하면 32비트를 64비트로 바꾸면서 값 손실이 일어나지 않습니다.
작은 쪽으로 통일하면 문제가 발생할 수 있기 때문이 큰 쪽에 맞춥니다.
정수형끼리, 부동소수점끼리 비교할 때는 크기가 큰 쪽에 맞추고 (크기가 큰 쪽이 표현 범위가 더 넓습니다.)정수형과 부동소수점을 비교할 때는 (어차피 부동소수점은 정확하지 않기 때문에) 부동소수점으로 맞춥니다.
모든 연산은 형태가 큰 변수에 맞추어 계산합니다. 비교 연산도 연산의 일종이므로 동일한 원칙이 적용됩니다.
tex_iter == tex_iter 은 그러니까 (int)tex_iter 을 (int64_t)( (int)tex_iter ) 로 캐스팅한 다음에 tex_iter 과 비교하는 식이 됩니다.
의도는 int 두 개를 곱셈했을 때 int 범위에서 overflow가 발생하는 지 확인하고자 하는 것 같네요.
감사합니다.