Let's use SoX's -stats command to inspect some files.
SoX says the 32-bit float file has a precision of 25-bit (rather than the generally claimed 24-bit), it is because you need to give up half of 24-bit integer values to represent negative values (-8388608 to +8388607), on the other hand floating point values are always signed. A 32-bit floating point value can represent integer values from -16777216 to +16777216 symmetrically and losslessly.
https://en.wikipedia.org/wiki/Singl...int_format#Precision_limits_on_integer_values
https://gist.github.com/skratchdot/c0602fa21a2020f015fc#file-help-format-txt
Also, while the concept presented in the ESS pdf is okay, don't take the numbers they mentioned very seriously.
Firstly, 30003 * 0.3162 (-10dB) is 9486.9486, and it is even less accurate than the 16-bit value (9488). Secondly, why did they use more digits (0.0177828) to represent -35dB? With the higher precision Windows calculator as reference (left column), 16-bit fixed-point is good enough to represent 0.3162, but not good enough for 0.0177828. -10dB is rounded to 20724 and -35dB is rounded to 1165 respectively.
Thirdly the binary number they quoted is not 533.5372.
Fourthly, If you can only use 32 fixed bits for calculation, you need to take into account that when you multiply two integers, unless both of them are 16-bit numbers, otherwise the result can be longer than 32 bits and results in overflow. You can only do 30003 * 20724 for -10dB and 30003 * 1165 for -35dB. Floating point math does not have this issue as it scales the bits automatically.
The ESS pdf only explained how fractional numbers can be represented in fixed-point, but not how the calculation is done.
Anyway, here is a calculator I wrote the demonstrate the math. By default it operates in 64-bit float, but the results can be displayed in 32-bit float (single) and fixed-point by specifying the desired bit-depth. I posted this calculator last year but this one is an updated version with enhanced precision on the "Analog" section. Keep in mind that the displayed values may slightly vary in different browsers and it is normal.
Anyway, the only scenario that I can discern a difference is when something is clipped.