Floating point is not exact. The more math you perform with it, the less exact it gets.

And btw, Arduino float and double are the same. 32-bit IEEE float.

As useless as it has been before I will mention to use fixed-point or choose smaller units and use integers. If I work in micro-meters (the unit, not the measuring tool) to achieve results in fractional meters then I will have 6 places accuracy and only need to add the decimal point for final output. A 32-bit signed integer (long) is good for 9 places.