기본적인 질문입니다만…
예를 들어 int32형 변수에 1000을 곱해서 overflow가 발생했을시,
struct int64 { Uint32 lowpart; Uint32 highpart; }; 에 나눠서 저장하려 합니다만…
도저히 방법이 떠오르질 않네요. 좋은 방법 부탁드립니다.
만일, 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
대충 감 잡으셨을 겁니다.
음.. overflow 를 부하없이 빠르게 알아낼 방법이 궁금하신건가요? 이건 잘 모르겠네요.
아니면 int64 처리가 문제인가요? 그냥 long long int 를 사용하시면 좋을 듯 한데요. 상위파트나 하위파트를 별도로 할고 싶을땐 bitwise 나 shift 로 알아낼 수 있으니 사용하는데 무리 없을 듯 한데요.
감사합니다. 감잡았습니다^^
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
만일, a_h, a_l, b_h, b_l
만일, 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
대충 감 잡으셨을 겁니다.
음.. overflow 를
음.. overflow 를 부하없이 빠르게 알아낼 방법이 궁금하신건가요?
이건 잘 모르겠네요.
아니면 int64 처리가 문제인가요?
그냥 long long int 를 사용하시면 좋을 듯 한데요.
상위파트나 하위파트를 별도로 할고 싶을땐 bitwise 나 shift 로 알아낼 수
있으니 사용하는데 무리 없을 듯 한데요.
감사합니다.
감사합니다. 감잡았습니다^^
댓글 달기