floating point numbers explained