Bit growth handling for complex multiplier using Gauss' method
The term a+b have a bit width of m+1, c+d have a bit width of n+1, (a+b)*(c+d) have a bit width of m+n+2. The term ac+bd have a bit width of m+n+1. If we add/subtract two independent terms, one of a bit width m+n+2 and the other of a bit width m+n+1, the bit width of the result may be as large as m+n+3, but for the expression (a+b)*(c+d) - a*c - b*d we know that the result is a*d + b*c with a bit width of m+n+1. Therefore, we can safely restrict the register bitness by a value of m+n+2 and be sure that there will be no carry from the register senior bit. More than that, we know beforehand that the senior bit of the final result will be zero. The +1 bitness of the intermediate result (a+b)*(c+d) is a payment for one less multiplication and I'm not sure we can get rid of the (m+n+2)-bit register while keeping the advantages of improved complex multiplication.