I can make the following list of Float16 values but it generates NaNs as well. I can also get rid of NaN’s. But is there a ready built way to enumerate through all non-NaN values of Float16?

i have trouble understanding the underlying repreaentation of float 16. On wikipedia is says that it only need 15bit in practice so I must be missing something. Clearly exponents of 0 will always be 0 so alot of values are “wasted” but I can seem to find the pattern on which UInt8 gets converted to NaN when reinterpreted as Float16

All the 16 bit NaN values are s11111xx xxxxxxxx, where the 10 bits of xx xxxxxxxx must be non-zero (if all zero, it represents +/- Inf).
Non-NaN values will be in the ranges 0x0000-0x7c00, and 0x8000-0xfc00.