The JLS says that a widening primitive conversion from float to double may result in "loss of information."
A widening primitive conversion from float to double that is not strictfp may lose information about the overall magnitude of the converted value.
posted 1 year ago
What may happen if you are not in a strictfp context is that a float is expanded to occupy > 32 bits, maybe 48 or 64. The rightmost bits are used to enhance the precision of the calculations, but the cast will reduce the float to a 32‑bit number and any other bits will be lost; when the number undergoes widening conversion to a double, those rightmost bits are replaced by 0000...
The correct approach (I think) is to note what CB says and don't use floats unless some method forces you to.