Мне нужно вычислить выражение, которое выглядит так:
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 - некоторое натуральное число.