Arithmetic underflow can occur when the true result of a floating-point operation is smaller in magnitude (that is, closer to zero) than the smallest value representable as a normal floating-point number in the target datatype.
[1] Underflow can in part be regarded as negative overflow of the exponent of the floating-point value.
This is because the size of this interval is many orders of magnitude larger than the distance between adjacent normal floating-point values just outside the gap.
While the machine epsilon is not to be confused with the underflow level (assuming subnormal numbers), it is closely related.
In most floating-point systems, the underflow level is smaller than the machine epsilon.
The occurrence of an underflow may set a ("sticky") status bit, raise an exception, at the hardware level generate an interrupt, or may cause some combination of these effects.
However, if the user is trapping on underflow, this may happen regardless of consideration for loss of precision.