| <html lang="en"> |
| <head> |
| <title>FP Exceptions - The GNU C Library</title> |
| <meta http-equiv="Content-Type" content="text/html"> |
| <meta name="description" content="The GNU C Library"> |
| <meta name="generator" content="makeinfo 4.13"> |
| <link title="Top" rel="start" href="index.html#Top"> |
| <link rel="up" href="Floating-Point-Errors.html#Floating-Point-Errors" title="Floating Point Errors"> |
| <link rel="next" href="Infinity-and-NaN.html#Infinity-and-NaN" title="Infinity and NaN"> |
| <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage"> |
| <!-- |
| This file documents the GNU C library. |
| |
| This is Edition 0.12, last updated 2007-10-27, |
| of `The GNU C Library Reference Manual', for version |
| 2.8 (Sourcery G++ Lite 2011.03-41). |
| |
| Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, |
| 2003, 2007, 2008, 2010 Free Software Foundation, Inc. |
| |
| Permission is granted to copy, distribute and/or modify this document |
| under the terms of the GNU Free Documentation License, Version 1.3 or |
| any later version published by the Free Software Foundation; with the |
| Invariant Sections being ``Free Software Needs Free Documentation'' |
| and ``GNU Lesser General Public License'', the Front-Cover texts being |
| ``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A |
| copy of the license is included in the section entitled "GNU Free |
| Documentation License". |
| |
| (a) The FSF's Back-Cover Text is: ``You have the freedom to |
| copy and modify this GNU manual. Buying copies from the FSF |
| supports it in developing GNU and promoting software freedom.''--> |
| <meta http-equiv="Content-Style-Type" content="text/css"> |
| <style type="text/css"><!-- |
| pre.display { font-family:inherit } |
| pre.format { font-family:inherit } |
| pre.smalldisplay { font-family:inherit; font-size:smaller } |
| pre.smallformat { font-family:inherit; font-size:smaller } |
| pre.smallexample { font-size:smaller } |
| pre.smalllisp { font-size:smaller } |
| span.sc { font-variant:small-caps } |
| span.roman { font-family:serif; font-weight:normal; } |
| span.sansserif { font-family:sans-serif; font-weight:normal; } |
| --></style> |
| <link rel="stylesheet" type="text/css" href="../cs.css"> |
| </head> |
| <body> |
| <div class="node"> |
| <a name="FP-Exceptions"></a> |
| <p> |
| Next: <a rel="next" accesskey="n" href="Infinity-and-NaN.html#Infinity-and-NaN">Infinity and NaN</a>, |
| Up: <a rel="up" accesskey="u" href="Floating-Point-Errors.html#Floating-Point-Errors">Floating Point Errors</a> |
| <hr> |
| </div> |
| |
| <h4 class="subsection">20.5.1 FP Exceptions</h4> |
| |
| <p><a name="index-exception-2359"></a><a name="index-signal-2360"></a><a name="index-zero-divide-2361"></a><a name="index-division-by-zero-2362"></a><a name="index-inexact-exception-2363"></a><a name="index-invalid-exception-2364"></a><a name="index-overflow-exception-2365"></a><a name="index-underflow-exception-2366"></a> |
| The IEEE 754<!-- /@w --> standard defines five <dfn>exceptions</dfn> that can occur |
| during a calculation. Each corresponds to a particular sort of error, |
| such as overflow. |
| |
| <p>When exceptions occur (when exceptions are <dfn>raised</dfn>, in the language |
| of the standard), one of two things can happen. By default the |
| exception is simply noted in the floating-point <dfn>status word</dfn>, and |
| the program continues as if nothing had happened. The operation |
| produces a default value, which depends on the exception (see the table |
| below). Your program can check the status word to find out which |
| exceptions happened. |
| |
| <p>Alternatively, you can enable <dfn>traps</dfn> for exceptions. In that case, |
| when an exception is raised, your program will receive the <code>SIGFPE</code> |
| signal. The default action for this signal is to terminate the |
| program. See <a href="Signal-Handling.html#Signal-Handling">Signal Handling</a>, for how you can change the effect of |
| the signal. |
| |
| <p><a name="index-matherr-2367"></a>In the System V math library, the user-defined function <code>matherr</code> |
| is called when certain exceptions occur inside math library functions. |
| However, the Unix98 standard deprecates this interface. We support it |
| for historical compatibility, but recommend that you do not use it in |
| new programs. |
| |
| <p class="noindent">The exceptions defined in IEEE 754<!-- /@w --> are: |
| |
| <dl> |
| <dt>‘<samp><span class="samp">Invalid Operation</span></samp>’<dd>This exception is raised if the given operands are invalid for the |
| operation to be performed. Examples are |
| (see IEEE 754<!-- /@w -->, section 7<!-- /@w -->): |
| <ol type=1 start=1> |
| <li>Addition or subtraction: &infin; - &infin;. (But |
| &infin; + &infin; = &infin;). |
| <li>Multiplication: 0 &middot; &infin;. |
| <li>Division: 0/0 or &infin;/&infin;. |
| <li>Remainder: x REM y, where y is zero or x is |
| infinite. |
| <li>Square root if the operand is less then zero. More generally, any |
| mathematical function evaluated outside its domain produces this |
| exception. |
| <li>Conversion of a floating-point number to an integer or decimal |
| string, when the number cannot be represented in the target format (due |
| to overflow, infinity, or NaN). |
| <li>Conversion of an unrecognizable input string. |
| <li>Comparison via predicates involving < or >, when one or |
| other of the operands is NaN. You can prevent this exception by using |
| the unordered comparison functions instead; see <a href="FP-Comparison-Functions.html#FP-Comparison-Functions">FP Comparison Functions</a>. |
| </ol> |
| |
| <p>If the exception does not trap, the result of the operation is NaN. |
| |
| <br><dt>‘<samp><span class="samp">Division by Zero</span></samp>’<dd>This exception is raised when a finite nonzero number is divided |
| by zero. If no trap occurs the result is either +&infin; or |
| -&infin;, depending on the signs of the operands. |
| |
| <br><dt>‘<samp><span class="samp">Overflow</span></samp>’<dd>This exception is raised whenever the result cannot be represented |
| as a finite value in the precision format of the destination. If no trap |
| occurs the result depends on the sign of the intermediate result and the |
| current rounding mode (IEEE 754<!-- /@w -->, section 7.3<!-- /@w -->): |
| <ol type=1 start=1> |
| <li>Round to nearest carries all overflows to &infin; |
| with the sign of the intermediate result. |
| <li>Round toward 0 carries all overflows to the largest representable |
| finite number with the sign of the intermediate result. |
| <li>Round toward -&infin; carries positive overflows to the |
| largest representable finite number and negative overflows to |
| -&infin;. |
| |
| <li>Round toward &infin; carries negative overflows to the |
| most negative representable finite number and positive overflows |
| to &infin;. |
| </ol> |
| |
| <p>Whenever the overflow exception is raised, the inexact exception is also |
| raised. |
| |
| <br><dt>‘<samp><span class="samp">Underflow</span></samp>’<dd>The underflow exception is raised when an intermediate result is too |
| small to be calculated accurately, or if the operation's result rounded |
| to the destination precision is too small to be normalized. |
| |
| <p>When no trap is installed for the underflow exception, underflow is |
| signaled (via the underflow flag) only when both tininess and loss of |
| accuracy have been detected. If no trap handler is installed the |
| operation continues with an imprecise small value, or zero if the |
| destination precision cannot hold the small exact result. |
| |
| <br><dt>‘<samp><span class="samp">Inexact</span></samp>’<dd>This exception is signalled if a rounded result is not exact (such as |
| when calculating the square root of two) or a result overflows without |
| an overflow trap. |
| </dl> |
| |
| </body></html> |
| |