I can see that ((a-b) (c-d)+(a+b) * (c+d))/2 is different to a*b, and that makes sense when you think about it, but the second part is confusing me a bit.
Also, I'm a bit confused by your suggestion to break it down into cases, do you mean if an uncertainty is negative? Because at the moment I'm making all uncertainties positive, but if there are cases where negative ones are correct, I need to fix that up.