
:mod:`fpectl` --- Floating point exception control
==================================================

.. module:: fpectl
   :platform: Unix
   :synopsis: Provide control for floating point exception handling.
.. moduleauthor:: Lee Busby <busby1@llnl.gov>
.. sectionauthor:: Lee Busby <busby1@llnl.gov>


.. note::

   The :mod:`fpectl` module is not built by default, and its usage is discouraged
   and may be dangerous except in the hands of experts.  See also the section
   :ref:`fpectl-limitations` on limitations for more details.

.. index:: single: IEEE-754

Most computers carry out floating point operations in conformance with the
so-called IEEE-754 standard. On any real computer, some floating point
operations produce results that cannot be expressed as a normal floating point
value. For example, try ::

   >>> import math
   >>> math.exp(1000)
   inf
   >>> math.exp(1000) / math.exp(1000)
   nan

(The example above will work on many platforms. DEC Alpha may be one exception.)
"Inf" is a special, non-numeric value in IEEE-754 that stands for "infinity",
and "nan" means "not a number." Note that, other than the non-numeric results,
nothing special happened when you asked Python to carry out those calculations.
That is in fact the default behaviour prescribed in the IEEE-754 standard, and
if it works for you, stop reading now.

In some circumstances, it would be better to raise an exception and stop
processing at the point where the faulty operation was attempted. The
:mod:`fpectl` module is for use in that situation. It provides control over
floating point units from several hardware manufacturers, allowing the user to
turn on the generation of :const:`SIGFPE` whenever any of the IEEE-754
exceptions Division by Zero, Overflow, or Invalid Operation occurs. In tandem
with a pair of wrapper macros that are inserted into the C code comprising your
python system, :const:`SIGFPE` is trapped and converted into the Python
:exc:`FloatingPointError` exception.

The :mod:`fpectl` module defines the following functions and may raise the given
exception:


.. function:: turnon_sigfpe()

   Turn on the generation of :const:`SIGFPE`, and set up an appropriate signal
   handler.


.. function:: turnoff_sigfpe()

   Reset default handling of floating point exceptions.


.. exception:: FloatingPointError

   After :func:`turnon_sigfpe` has been executed, a floating point operation that
   raises one of the IEEE-754 exceptions Division by Zero, Overflow, or Invalid
   operation will in turn raise this standard Python exception.


.. _fpectl-example:

Example
-------

The following example demonstrates how to start up and test operation of the
:mod:`fpectl` module. ::

   >>> import fpectl
   >>> import fpetest
   >>> fpectl.turnon_sigfpe()
   >>> fpetest.test()
   overflow        PASS
   FloatingPointError: Overflow

   div by 0        PASS
   FloatingPointError: Division by zero
     [ more output from test elided ]
   >>> import math
   >>> math.exp(1000)
   Traceback (most recent call last):
     File "<stdin>", line 1, in ?
   FloatingPointError: in math_1


.. _fpectl-limitations:

Limitations and other considerations
------------------------------------

Setting up a given processor to trap IEEE-754 floating point errors currently
requires custom code on a per-architecture basis. You may have to modify
:mod:`fpectl` to control your particular hardware.

Conversion of an IEEE-754 exception to a Python exception requires that the
wrapper macros ``PyFPE_START_PROTECT`` and ``PyFPE_END_PROTECT`` be inserted
into your code in an appropriate fashion.  Python itself has been modified to
support the :mod:`fpectl` module, but many other codes of interest to numerical
analysts have not.

The :mod:`fpectl` module is not thread-safe.


.. seealso::

   Some files in the source distribution may be interesting in learning more about
   how this module operates. The include file :file:`Include/pyfpe.h` discusses the
   implementation of this module at some length. :file:`Modules/fpetestmodule.c`
   gives several examples of use. Many additional examples can be found in
   :file:`Objects/floatobject.c`.

