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.