The problem is in general, that sums a + b can easily fall in the gap between one float value and the next float value. In this case the result is rounded to the nearest float. (If the result is exactly half way between two float values, the IEEE default is to round to even, explained later.)
If a is small and b is very large, it may happen that the actual sum (of real numbers) falls between b and the next float value after b. If a is very small compared to this gap, a + b will be closer to a and so the IEEE floating point result is
a + b is equal to b (even though a > 0 and b > 0).
This happens for a = 2.78 and b = 1e35.