Can someone explain to me (in detail) how to multiply two __int64 objs and check if the result will fit in __int64.
Note: Do not use any compiler or processor dependent routines.
not assuming a
and b
are positive:
__int64 a,b;
//...
__int64 tmp_result = abs(a) * abs(b) ;
if (
( a && b ) &&
(
( tmp_result < abs(a) || tmp_result < abs(b) ) ||
( tmp_result / abs(a) != abs(b)) ||
( a == TYPE_MIN && b != 1) ||
( b == TYPE_MIN && a != 1)
)
)
std::cout << "overflow";
__int64 result = a * b;
EDIT: Adding corner cases to code.
EDIT: In my opinion just ( a && a * b / a != b)
is enough.
来源:https://stackoverflow.com/questions/5840529/multiplying-int64s