Умножение __int64's - PullRequest
4 голосов
/ 30 апреля 2011

Может кто-нибудь объяснить мне (подробно), как умножить два объекта __int64 и проверить, будет ли результат соответствовать __int64.

Примечание. Не используйте подпрограммы, зависящие от компилятора или процессора.

1 Ответ

4 голосов
/ 30 апреля 2011

не предполагая, что a и b положительны:

__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;

РЕДАКТИРОВАТЬ: Добавление угловых случаев к коду.

РЕДАКТИРОВАТЬ: На мой взгляд, достаточно ( a && a * b / a != b).

...