Implicit conversions from int to float may lose precision when when calling methods with overloads that accept bothfloat and double.

For example, Math.scalb has overloads Math.scalb(float, int) and Math.scalb(double, int).

When passing an int as the first argument, Math.scalb(float, int) will be selected. If the result of Math.scalb(float, int) is then used as a double, this may result in a loss of precision.

To avoid this, an explicit cast to double can be used to call the Match.scalb(double, int) overload:

int x = ...
int y = ...
double f = Math.scalb((double) x, 2);