Not all numbers between -3.4028235 . 10+38 and +3.4028235 . 10+38 can be represented as a float (similar considerations hold for double).
This aspect is shown in the picture below: the closer we are to zero, the closer to each other are the numbers that can be represented (depicted by the vertical lines); the more we move away from zero the wider from each other are the numbers that can be represented.
Example: The number that is nearest to +3.4028235 . 10+38 and that can be represented as a float is +3.4028234 . 10+38.
This leads to approximations due to rounding errors in computing the values of expressions.
Example:
printsfloat x = 1222333444.0f; System.out.println("x = " + x); x += 1.0; System.out.println("x+1 = " + x);
x = 1.222333444E9; x+1 = 1.222333444E9;while
printsint j = 1222333444; System.out.println("j = " + j); j += 1; System.out.println("j+1 = " + j);
j = 1222333444; j+1 = 1222333445;