The union approach isn't quite portable. It depends on the size of whatever types you use. (If sizeof(your_fp_type) > sizeof(your_int_type), then you won't be able to iterate over the whole range, even if you had the time.)
Either way you go, realize that the possible floating point values aren't evenly distributed through the range of whatever type you choose. The difference between values gets bigger as you move away from 0. Considering that, and the time it'd take to generate such a list, and the fact that you don't even have enough HD space to represent every possible double (I guarantee you don't!), let alone RAM...I have to question the value of creating such a list. Looking up the value would take longer than just doing the calculation.