Imagine a Radix2 butterfly. For each real and imaginary part you have
z0 = x0 + x1
z1 = x0 - x1
and then you do a complex multiplication of z * (twiddle factor).
If you have a input signal that you want to maintain full precision then x0 and x1 are hopefully bounded between -/+1 fully. Thus, the worst case result is when x0 and x1 both equal one, and the twiddle factor is 1+1j. In this case as you go through the equation z0 will be 2 (z1 will be 0) and then z0 * twiddle factor could result in 2*sqrt(2). The 'growth' of this value would obviously overflow and cause an error. The scaling in FFTs essentially accounts for this effect, and is why the SNR for an FFT is generally we'll below the 6*2^(bitlength) rule of thumb. Some of the megacores have a variety of schemes to account for this including block floating point.
But thats a whole different beast.
blk