How to avoid overflow in expr. A * B - C * D
- by Ir0nm
I need to compute an expression which looks like:
A*B - C*D, where their types are: signed long long int A, B, C, D;
Each number can be really big (not overflowing its type). While A*B could cause overflow, at same time expression A*B - C*D can be really small. How can I compute it correctly?
For example: MAX * MAX - (MAX - 1) * (MAX + 1) == 1, where MAX = LLONG_MAX - n and n - some natural number.