An error condition that changes the normal flow of control in a program. An exception may be generated ("raised") by hardware or software. Hardware exceptions include reset, interrupt or a signal from a memory management unit. Exceptions may be generated by the arithmetic logic unit or floating-point unit for numerical errors such as divide by zero, overflow or underflow or instruction decoding errors such as privileged, reserved, trap or undefined instructions. Software exceptions are even more varied and the term could be applied to any kind of error checking which alters the normal behaviour of the program.