int 곱셈의 overflow 처리

CS의 이미지

기본적인 질문입니다만…

예를 들어 int32형 변수에 1000을 곱해서 overflow가 발생했을시,

struct int64 {
Uint32 lowpart;
Uint32 highpart;
};
에 나눠서 저장하려 합니다만…

도저히 방법이 떠오르질 않네요.
좋은 방법 부탁드립니다.

seoleda의 이미지

만일, a_h, a_l, b_h, b_l 이 2^16보다 작은경우, 32bit의 두 정수는 다음과 같이 쓸 수 있습니다.

a = a_h*2^16 + a_l
b = b_h*2^16 + b_l

그럼 둘을 곱해보죠.
a*b = a_h*b_h*(2^32) + (a_h*b_l+b_h*a_l)*(2^16) + a_l*b_l

대충 감 잡으셨을 겁니다.

ssehoony의 이미지

음.. overflow 를 부하없이 빠르게 알아낼 방법이 궁금하신건가요?
이건 잘 모르겠네요.

아니면 int64 처리가 문제인가요?
그냥 long long int 를 사용하시면 좋을 듯 한데요.
상위파트나 하위파트를 별도로 할고 싶을땐 bitwise 나 shift 로 알아낼 수
있으니 사용하는데 무리 없을 듯 한데요.

CS의 이미지

감사합니다. 감잡았습니다^^