Мне нужно вычислить выражение, которое выглядит так:
A*B - C*D
, где их типы: signed long long int A, B, C, D;
Каждый номер может быть действительно большим (не переполняя его тип). В то время как A*B
может вызвать переполнение, в то же время выражение A*B - C*D
может быть очень маленьким. Как я могу правильно вычислить его?
Например: MAX * MAX - (MAX - 1) * (MAX + 1) == 1
, где MAX = LLONG_MAX - n
и n - некоторое натуральное число.