Arduino vs Math precision

A float variable is 4 bytes. The way the bits are used to store the number affects the precision of the value, but it is more than 4 decimal places.

The "loss-of-precision" that you are seeing is entirely a function of how the number is being formatted for display. You have control, by specifying the number of digits after the decimal point, of how that formatting occurs.