Exception handling is the process of responding to the occurrence, during computation, of exceptions anomalous or exceptional conditions requiring special processing often changing the normal flow of program execution. It is provided by specialized programming language constructs or computer hardware mechanisms. In general, an exception is handled (resolved) by saving the current state of execution in a predefined place and switching the execution to a specific subroutine known as an exception handler. If exceptions are continuable, the handler may later resume the execution at the original location using the saved information. For example, a floating point divide by zero exception will typically, by default, allow the program to be resumed, while an out of memory condition might not be resolvable transparently. Alternative approaches to exception handling in software are error checking, which maintains normal program flow with later explicit checks for contingencies reported using special return values or some auxiliary global variable such as C’s or floating point status flags; or input validation to preemptively filter exceptional cases.