Wav files are stored in a format known as linear PCM. Essentially, they use a signed integer representation of the samples. For instance, 16 bit audio has a maximum value of 32768 and a minimum value of -32767. Floating point representations are stored not as simple integers, but as an integer and a mantissa. Some of the bits are used to store the integer and the rest are used to store the mantissa. You can scale floating point numbers over a larger range without a significant loss in dynamic range than you can integers.
Example:
An integer representation of one 16 bit audio sample might be 11643. In a floating point representation, I could write that as:
1.1643 x 10^4
If I were to drop the level by 40 dB (that's division by 100), the integer would become 116, thereby losing the .43 fractional part of the number. On the other hand, the floating point representation would not lose that fractional part:
1.1643 x 10^2
If you wanted to increase the gain by 40 dB, then the integer representation would clip at 32768 (you really want 1164300, but there are not enough bits to represent it in 16 bits), but floating point would be 1.1643 x 10^6.
So, you don't see a reduction in dynamic range associated with gain adjustment.
Now, I'm not being careful with exactly how floating point numbers are represtented by the bits used for each sample, but you get the idea...
For way more than you probably want to know about floating point numbers, here is a link that explains it better than I can:
http://stevehollasch.com/cgindex/coding/ieeefloat.html(Thanks to Steve Hollasch for the information at this link!)