13a8617a8SJordan K. Hubbard.\" Copyright (c) 1985 Regents of the University of California. 23a8617a8SJordan K. Hubbard.\" All rights reserved. 33a8617a8SJordan K. Hubbard.\" 43a8617a8SJordan K. Hubbard.\" Redistribution and use in source and binary forms, with or without 53a8617a8SJordan K. Hubbard.\" modification, are permitted provided that the following conditions 63a8617a8SJordan K. Hubbard.\" are met: 73a8617a8SJordan K. Hubbard.\" 1. Redistributions of source code must retain the above copyright 83a8617a8SJordan K. Hubbard.\" notice, this list of conditions and the following disclaimer. 93a8617a8SJordan K. Hubbard.\" 2. Redistributions in binary form must reproduce the above copyright 103a8617a8SJordan K. Hubbard.\" notice, this list of conditions and the following disclaimer in the 113a8617a8SJordan K. Hubbard.\" documentation and/or other materials provided with the distribution. 123a8617a8SJordan K. Hubbard.\" 3. All advertising materials mentioning features or use of this software 133a8617a8SJordan K. Hubbard.\" must display the following acknowledgement: 143a8617a8SJordan K. Hubbard.\" This product includes software developed by the University of 153a8617a8SJordan K. Hubbard.\" California, Berkeley and its contributors. 163a8617a8SJordan K. Hubbard.\" 4. Neither the name of the University nor the names of its contributors 173a8617a8SJordan K. Hubbard.\" may be used to endorse or promote products derived from this software 183a8617a8SJordan K. Hubbard.\" without specific prior written permission. 193a8617a8SJordan K. Hubbard.\" 203a8617a8SJordan K. Hubbard.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 213a8617a8SJordan K. Hubbard.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 223a8617a8SJordan K. Hubbard.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 233a8617a8SJordan K. Hubbard.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 243a8617a8SJordan K. Hubbard.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 253a8617a8SJordan K. Hubbard.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 263a8617a8SJordan K. Hubbard.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 273a8617a8SJordan K. Hubbard.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 283a8617a8SJordan K. Hubbard.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 293a8617a8SJordan K. Hubbard.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 303a8617a8SJordan K. Hubbard.\" SUCH DAMAGE. 313a8617a8SJordan K. Hubbard.\" 323a8617a8SJordan K. Hubbard.\" from: @(#)math.3 6.10 (Berkeley) 5/6/91 337f3dea24SPeter Wemm.\" $FreeBSD$ 343a8617a8SJordan K. Hubbard.\" 352a6bf1faSDavid Schultz.Dd June 11, 2004 362a6bf1faSDavid Schultz.Dt MATH 3 372a6bf1faSDavid Schultz.Os 383a8617a8SJordan K. Hubbard.ds up \fIulp\fR 393a8617a8SJordan K. Hubbard.de If 403a8617a8SJordan K. Hubbard.if n \\ 413a8617a8SJordan K. Hubbard\\$1Infinity\\$2 423a8617a8SJordan K. Hubbard.if t \\ 433a8617a8SJordan K. Hubbard\\$1\\(if\\$2 443a8617a8SJordan K. Hubbard.. 452a6bf1faSDavid Schultz.Sh NAME 46dbc8f2b5SDavid Schultzmath \- floating-point mathematical library 47dbc8f2b5SDavid Schultz.Sh LIBRARY 48dbc8f2b5SDavid Schultz.Lb libm 49dbc8f2b5SDavid Schultz.Sh SYNOPSIS 50dbc8f2b5SDavid Schultz.In math.h 512a6bf1faSDavid Schultz.Sh DESCRIPTION 52dbc8f2b5SDavid SchultzThese functions constitute the C math library. 532a6bf1faSDavid Schultz.Sh "LIST OF FUNCTIONS" 542a6bf1faSDavid SchultzEach of the following 552a6bf1faSDavid Schultz.Vt double 562a6bf1faSDavid Schultzfunctions has a 572a6bf1faSDavid Schultz.Vt float 582a6bf1faSDavid Schultzcounterpart with an 592a6bf1faSDavid Schultz.Ql f 602a6bf1faSDavid Schultzappended to the name and a 612a6bf1faSDavid Schultz.Vt long double 622a6bf1faSDavid Schultzcounterpart with an 632a6bf1faSDavid Schultz.Ql l 642a6bf1faSDavid Schultzappended. 652a6bf1faSDavid SchultzAs an example, the 662a6bf1faSDavid Schultz.Vt float 672a6bf1faSDavid Schultzand 682a6bf1faSDavid Schultz.Vt long double 692a6bf1faSDavid Schultzcounterparts of 702a6bf1faSDavid Schultz.Ft double 712a6bf1faSDavid Schultz.Fn acos "double x" 722a6bf1faSDavid Schultzare 732a6bf1faSDavid Schultz.Ft float 742a6bf1faSDavid Schultz.Fn acosf "float x" 752a6bf1faSDavid Schultzand 762a6bf1faSDavid Schultz.Ft long double 772a6bf1faSDavid Schultz.Fn acosl "long double x" , 782a6bf1faSDavid Schultzrespectively. 79dbc8f2b5SDavid Schultz.Pp 80dbc8f2b5SDavid SchultzThe programs are accurate to within the numbers 81dbc8f2b5SDavid Schultzof \*(ups tabulated below; an \*(up is one \fIU\fRnit in the \fIL\fRast 82dbc8f2b5SDavid Schultz\fIP\fRlace. 833a8617a8SJordan K. Hubbard.sp 2 843a8617a8SJordan K. Hubbard.nf 852a6bf1faSDavid Schultz.ta \w'nexttoward'u+10n +\w'remainder with partial quot'u 862a6bf1faSDavid Schultz\fIName\fP \fIDescription\fP \fIError Bound (ULPs)\fP 872a6bf1faSDavid Schultz.ta \w'nexttoward'u+4n +\w'remainder with partial quotient'u+6nC 883a8617a8SJordan K. Hubbard.sp 5p 892a6bf1faSDavid Schultz.\" XXX Many of these error bounds are wrong for the current implementation! 90dbc8f2b5SDavid Schultzacos inverse trigonometric function ??? 91dbc8f2b5SDavid Schultzacosh inverse hyperbolic function ??? 92dbc8f2b5SDavid Schultzasin inverse trigonometric function ??? 93dbc8f2b5SDavid Schultzasinh inverse hyperbolic function ??? 94dbc8f2b5SDavid Schultzatan inverse trigonometric function ??? 95dbc8f2b5SDavid Schultzatanh inverse hyperbolic function ??? 96dbc8f2b5SDavid Schultzatan2 inverse trigonometric function ??? 972a6bf1faSDavid Schultzcbrt cube root 1 982a6bf1faSDavid Schultzceil integer no less than 0 992a6bf1faSDavid Schultzcopysign copy sign bit 0 1002a6bf1faSDavid Schultzcos trigonometric function 1 101dbc8f2b5SDavid Schultzcosh hyperbolic function ??? 102dbc8f2b5SDavid Schultzerf error function 1 103dbc8f2b5SDavid Schultzerfc complementary error function 1 1042a6bf1faSDavid Schultzexp exponential base e 1 1052a6bf1faSDavid Schultz.\" exp2 exponential base 2 ??? 1062a6bf1faSDavid Schultzexpm1 exp(x)\-1 1 1072a6bf1faSDavid Schultzfabs absolute value 0 108dbc8f2b5SDavid Schultzfdim positive difference 1 1092a6bf1faSDavid Schultzfloor integer no greater than 0 1102a6bf1faSDavid Schultz.\" fma multiply-add ??? 111dbc8f2b5SDavid Schultzfmax maximum function 0 112dbc8f2b5SDavid Schultzfmin minimum function 0 1132a6bf1faSDavid Schultzfmod remainder function ??? 1142a6bf1faSDavid Schultzfrexp extract mantissa and exponent 0 1152a6bf1faSDavid Schultzhypot Euclidean distance 1 1162a6bf1faSDavid Schultzilogb exponent extraction 0 1172a6bf1faSDavid Schultzj0 bessel function ??? 1182a6bf1faSDavid Schultzj1 bessel function ??? 1192a6bf1faSDavid Schultzjn bessel function ??? 1202a6bf1faSDavid Schultzldexp multiply by power of 2 0 121dbc8f2b5SDavid Schultzlgamma log gamma function 1 1222a6bf1faSDavid Schultz.\" llrint round to integer 0 1232a6bf1faSDavid Schultz.\" llround round to nearest integer 0 1242a6bf1faSDavid Schultzlog natural logarithm 1 125dbc8f2b5SDavid Schultzlog10 logarithm to base 10 1 1262a6bf1faSDavid Schultzlog1p log(1+x) 1 1272a6bf1faSDavid Schultz.\" log2 base 2 logarithm 0 1282a6bf1faSDavid Schultzlogb exponent extraction 0 1292a6bf1faSDavid Schultz.\" lrint round to integer 0 1302a6bf1faSDavid Schultz.\" lround round to nearest integer 0 131dbc8f2b5SDavid Schultzmodf extract fractional part 0 1322a6bf1faSDavid Schultz.\" nan return quiet \*(Na) 0 133dbc8f2b5SDavid Schultznearbyint round to integer 0 134f7748f6eSDavid Schultznextafter next representable value 0 1352a6bf1faSDavid Schultz.\" nexttoward next representable value 0 1362a6bf1faSDavid Schultzpow exponential x**y 60\-500 1372a6bf1faSDavid Schultzremainder remainder 0 1382a6bf1faSDavid Schultz.\" remquo remainder with partial quotient ??? 1392a6bf1faSDavid Schultzrint round to nearest integer 0 1402a6bf1faSDavid Schultzround round to nearest integer 0 141f7748f6eSDavid Schultzscalbln exponent adjustment 0 1422a6bf1faSDavid Schultzscalbn exponent adjustment 0 1432a6bf1faSDavid Schultzsin trigonometric function 1 144dbc8f2b5SDavid Schultzsinh hyperbolic function ??? 1452a6bf1faSDavid Schultzsqrt square root 1 146dbc8f2b5SDavid Schultztan trigonometric function 1 147dbc8f2b5SDavid Schultztanh hyperbolic function ??? 148dbc8f2b5SDavid Schultztgamma gamma function 1 149f7748f6eSDavid Schultztrunc round towards zero 0 1502a6bf1faSDavid Schultzy0 bessel function ??? 1512a6bf1faSDavid Schultzy1 bessel function ??? 1522a6bf1faSDavid Schultzyn bessel function ??? 1533a8617a8SJordan K. Hubbard.ta 1543a8617a8SJordan K. Hubbard.fi 1552a6bf1faSDavid Schultz.Sh NOTES 1562a6bf1faSDavid SchultzVirtually all modern floating-point units attempt to support 1572a6bf1faSDavid SchultzIEEE Standard 754 for Binary Floating-Point Arithmetic. 1582a6bf1faSDavid SchultzThis standard does not cover particular routines in the math library 1592a6bf1faSDavid Schultzexcept for the few documented in 1602a6bf1faSDavid Schultz.Xr ieee 3 ; 1612a6bf1faSDavid Schultzit primarily defines representations of numbers and abstract 1622a6bf1faSDavid Schultzproperties of arithmetic operations relating to precision, rounding, 1632a6bf1faSDavid Schultzand exceptional cases, as described below. 1642a6bf1faSDavid Schultz.Pp 1653a8617a8SJordan K. Hubbard\fBIEEE STANDARD 754 Floating\-Point Arithmetic:\fR 1662a6bf1faSDavid Schultz.Pp 167dbc8f2b5SDavid Schultz.\" XXX mention single- and extended-/quad- precisions 1683a8617a8SJordan K. HubbardProperties of IEEE 754 Double\-Precision: 1692a6bf1faSDavid Schultz.Bd -filled -offset indent 1703a8617a8SJordan K. HubbardWordsize: 64 bits, 8 bytes. Radix: Binary. 1713a8617a8SJordan K. Hubbard.br 1723a8617a8SJordan K. HubbardPrecision: 53 1733a8617a8SJordan K. Hubbard.if n \ 1743a8617a8SJordan K. Hubbardsig. 1753a8617a8SJordan K. Hubbard.if t \ 1763a8617a8SJordan K. Hubbardsignificant 1773a8617a8SJordan K. Hubbardbits, roughly like 16 1783a8617a8SJordan K. Hubbard.if n \ 1793a8617a8SJordan K. Hubbardsig. 1803a8617a8SJordan K. Hubbard.if t \ 1813a8617a8SJordan K. Hubbardsignificant 1823a8617a8SJordan K. Hubbarddecimals. 1832a6bf1faSDavid Schultz.Bd -filled -offset indent -compact 1843a8617a8SJordan K. HubbardIf x and x' are consecutive positive Double\-Precision 1853a8617a8SJordan K. Hubbardnumbers (they differ by 1 \*(up), then 1863a8617a8SJordan K. Hubbard.br 1873a8617a8SJordan K. Hubbard1.1e\-16 < 0.5**53 < (x'\-x)/x \(<= 0.5**52 < 2.3e\-16. 1882a6bf1faSDavid Schultz.Ed 1893a8617a8SJordan K. Hubbard.nf 1903a8617a8SJordan K. Hubbard.ta \w'Range:'u+1n +\w'Underflow threshold'u+1n +\w'= 2.0**1024'u+1n 1913a8617a8SJordan K. HubbardRange: Overflow threshold = 2.0**1024 = 1.8e308 1923a8617a8SJordan K. Hubbard Underflow threshold = 0.5**1022 = 2.2e\-308 1933a8617a8SJordan K. Hubbard.ta 1943a8617a8SJordan K. Hubbard.fi 1952a6bf1faSDavid Schultz.Bd -filled -offset indent -compact 1963a8617a8SJordan K. HubbardOverflow goes by default to a signed 1973a8617a8SJordan K. Hubbard.If "" . 1983a8617a8SJordan K. Hubbard.br 1993a8617a8SJordan K. HubbardUnderflow is \fIGradual,\fR rounding to the nearest 2003a8617a8SJordan K. Hubbardinteger multiple of 0.5**1074 = 4.9e\-324. 2012a6bf1faSDavid Schultz.Ed 2023a8617a8SJordan K. HubbardZero is represented ambiguously as +0 or \-0. 2032a6bf1faSDavid Schultz.Bd -filled -offset indent -compact 2043a8617a8SJordan K. HubbardIts sign transforms correctly through multiplication or 2053a8617a8SJordan K. Hubbarddivision, and is preserved by addition of zeros 2063a8617a8SJordan K. Hubbardwith like signs; but x\-x yields +0 for every 2073a8617a8SJordan K. Hubbardfinite x. The only operations that reveal zero's 2083a8617a8SJordan K. Hubbardsign are division by zero and copysign(x,\(+-0). 2093a8617a8SJordan K. HubbardIn particular, comparison (x > y, x \(>= y, etc.) 2103a8617a8SJordan K. Hubbardcannot be affected by the sign of zero; but if 2113a8617a8SJordan K. Hubbardfinite x = y then 2123a8617a8SJordan K. Hubbard.If 2133a8617a8SJordan K. Hubbard\&= 1/(x\-y) 2143a8617a8SJordan K. Hubbard.if n \ 2153a8617a8SJordan K. Hubbard!= 2163a8617a8SJordan K. Hubbard.if t \ 2173a8617a8SJordan K. Hubbard\(!= 2183a8617a8SJordan K. Hubbard\-1/(y\-x) = 2193a8617a8SJordan K. Hubbard.If \- . 2202a6bf1faSDavid Schultz.Ed 2213a8617a8SJordan K. Hubbard.If 2223a8617a8SJordan K. Hubbardis signed. 2232a6bf1faSDavid Schultz.Bd -filled -offset indent -compact 2243a8617a8SJordan K. Hubbardit persists when added to itself 2253a8617a8SJordan K. Hubbardor to any finite number. Its sign transforms 2263a8617a8SJordan K. Hubbardcorrectly through multiplication and division, and 2273a8617a8SJordan K. Hubbard.If (finite)/\(+- \0=\0\(+-0 2283a8617a8SJordan K. Hubbard(nonzero)/0 = 2293a8617a8SJordan K. Hubbard.If \(+- . 2303a8617a8SJordan K. HubbardBut 2313a8617a8SJordan K. Hubbard.if n \ 2323a8617a8SJordan K. HubbardInfinity\-Infinity, Infinity\(**0 and Infinity/Infinity 2333a8617a8SJordan K. Hubbard.if t \ 2343a8617a8SJordan K. Hubbard\(if\-\(if, \(if\(**0 and \(if/\(if 2353a8617a8SJordan K. Hubbardare, like 0/0 and sqrt(\-3), 2362a6bf1faSDavid Schultzinvalid operations that produce \*(Na. ... 2372a6bf1faSDavid Schultz.Ed 2383a8617a8SJordan K. HubbardReserved operands: 2392a6bf1faSDavid Schultz.Bd -filled -offset indent -compact 2403a8617a8SJordan K. Hubbardthere are 2**53\-2 of them, all 2412a6bf1faSDavid Schultzcalled \*(Na (\fIN\fRot \fIa N\fRumber). 2422a6bf1faSDavid SchultzSome, called Signaling \*(Nas, trap any floating\-point operation 2433a8617a8SJordan K. Hubbardperformed upon them; they are used to mark missing 2443a8617a8SJordan K. Hubbardor uninitialized values, or nonexistent elements 2452a6bf1faSDavid Schultzof arrays. The rest are Quiet \*(Nas; they are 2463a8617a8SJordan K. Hubbardthe default results of Invalid Operations, and 2473a8617a8SJordan K. Hubbardpropagate through subsequent arithmetic operations. 2483a8617a8SJordan K. HubbardIf x 2493a8617a8SJordan K. Hubbard.if n \ 2503a8617a8SJordan K. Hubbard!= 2513a8617a8SJordan K. Hubbard.if t \ 2523a8617a8SJordan K. Hubbard\(!= 2532a6bf1faSDavid Schultzx then x is \*(Na; every other predicate 2542a6bf1faSDavid Schultz(x > y, x = y, x < y, ...) is FALSE if \*(Na is involved. 2553a8617a8SJordan K. Hubbard.br 2562a6bf1faSDavid SchultzNOTE: Trichotomy is violated by \*(Na. 2572a6bf1faSDavid Schultz.Bd -filled -offset indent -compact 2583a8617a8SJordan K. HubbardBesides being FALSE, predicates that entail ordered 2593a8617a8SJordan K. Hubbardcomparison, rather than mere (in)equality, 2602a6bf1faSDavid Schultzsignal Invalid Operation when \*(Na is involved. 2612a6bf1faSDavid Schultz.Ed 2622a6bf1faSDavid Schultz.Ed 2633a8617a8SJordan K. HubbardRounding: 2642a6bf1faSDavid Schultz.Bd -filled -offset indent -compact 2653a8617a8SJordan K. HubbardEvery algebraic operation (+, \-, \(**, /, 2663a8617a8SJordan K. Hubbard.if n \ 2673a8617a8SJordan K. Hubbardsqrt) 2683a8617a8SJordan K. Hubbard.if t \ 2693a8617a8SJordan K. Hubbard\(sr) 2703a8617a8SJordan K. Hubbardis rounded by default to within half an \*(up, and 2713a8617a8SJordan K. Hubbardwhen the rounding error is exactly half an \*(up then 2723a8617a8SJordan K. Hubbardthe rounded value's least significant bit is zero. 2733a8617a8SJordan K. HubbardThis kind of rounding is usually the best kind, 2743a8617a8SJordan K. Hubbardsometimes provably so; for instance, for every 2753a8617a8SJordan K. Hubbardx = 1.0, 2.0, 3.0, 4.0, ..., 2.0**52, we find 2763a8617a8SJordan K. Hubbard(x/3.0)\(**3.0 == x and (x/10.0)\(**10.0 == x and ... 2773a8617a8SJordan K. Hubbarddespite that both the quotients and the products 2783a8617a8SJordan K. Hubbardhave been rounded. Only rounding like IEEE 754 2793a8617a8SJordan K. Hubbardcan do that. But no single kind of rounding can be 2803a8617a8SJordan K. Hubbardproved best for every circumstance, so IEEE 754 2813a8617a8SJordan K. Hubbardprovides rounding towards zero or towards 2823a8617a8SJordan K. Hubbard.If + 2833a8617a8SJordan K. Hubbardor towards 2843a8617a8SJordan K. Hubbard.If \- 2853a8617a8SJordan K. Hubbardat the programmer's option. And the 2863a8617a8SJordan K. Hubbardsame kinds of rounding are specified for 2873a8617a8SJordan K. HubbardBinary\-Decimal Conversions, at least for magnitudes 2883a8617a8SJordan K. Hubbardbetween roughly 1.0e\-10 and 1.0e37. 2892a6bf1faSDavid Schultz.Ed 2903a8617a8SJordan K. HubbardExceptions: 2912a6bf1faSDavid Schultz.Bd -filled -offset indent -compact 2923a8617a8SJordan K. HubbardIEEE 754 recognizes five kinds of floating\-point exceptions, 2933a8617a8SJordan K. Hubbardlisted below in declining order of probable importance. 2942a6bf1faSDavid Schultz.Bd -filled -offset indent -compact 2953a8617a8SJordan K. Hubbard.nf 2963a8617a8SJordan K. Hubbard.ta \w'Invalid Operation'u+6n +\w'Gradual Underflow'u+2n 2973a8617a8SJordan K. HubbardException Default Result 2983a8617a8SJordan K. Hubbard.tc \(ru 2993a8617a8SJordan K. Hubbard 3003a8617a8SJordan K. Hubbard.tc 3012a6bf1faSDavid SchultzInvalid Operation \*(Na, or FALSE 3023a8617a8SJordan K. Hubbard.if n \{\ 3033a8617a8SJordan K. HubbardOverflow \(+-Infinity 3043a8617a8SJordan K. HubbardDivide by Zero \(+-Infinity \} 3053a8617a8SJordan K. Hubbard.if t \{\ 3063a8617a8SJordan K. HubbardOverflow \(+-\(if 3073a8617a8SJordan K. HubbardDivide by Zero \(+-\(if \} 3083a8617a8SJordan K. HubbardUnderflow Gradual Underflow 3093a8617a8SJordan K. HubbardInexact Rounded value 3103a8617a8SJordan K. Hubbard.ta 3113a8617a8SJordan K. Hubbard.fi 3122a6bf1faSDavid Schultz.Ed 3133a8617a8SJordan K. HubbardNOTE: An Exception is not an Error unless handled 3143a8617a8SJordan K. Hubbardbadly. What makes a class of exceptions exceptional 3153a8617a8SJordan K. Hubbardis that no single default response can be satisfactory 3163a8617a8SJordan K. Hubbardin every instance. On the other hand, if a default 3173a8617a8SJordan K. Hubbardresponse will serve most instances satisfactorily, 3183a8617a8SJordan K. Hubbardthe unsatisfactory instances cannot justify aborting 3193a8617a8SJordan K. Hubbardcomputation every time the exception occurs. 3202a6bf1faSDavid Schultz.Ed 3212a6bf1faSDavid Schultz.Pp 3223a8617a8SJordan K. HubbardFor each kind of floating\-point exception, IEEE 754 3233a8617a8SJordan K. Hubbardprovides a Flag that is raised each time its exception 3243a8617a8SJordan K. Hubbardis signaled, and stays raised until the program resets 3253a8617a8SJordan K. Hubbardit. Programs may also test, save and restore a flag. 3263a8617a8SJordan K. HubbardThus, IEEE 754 provides three ways by which programs 3273a8617a8SJordan K. Hubbardmay cope with exceptions for which the default result 3283a8617a8SJordan K. Hubbardmight be unsatisfactory: 3292a6bf1faSDavid Schultz.Bl -enum 3302a6bf1faSDavid Schultz.It 3313a8617a8SJordan K. HubbardTest for a condition that might cause an exception 3323a8617a8SJordan K. Hubbardlater, and branch to avoid the exception. 3332a6bf1faSDavid Schultz.It 3343a8617a8SJordan K. HubbardTest a flag to see whether an exception has occurred 3353a8617a8SJordan K. Hubbardsince the program last reset its flag. 3362a6bf1faSDavid Schultz.It 3373a8617a8SJordan K. HubbardTest a result to see whether it is a value that only 3383a8617a8SJordan K. Hubbardan exception could have produced. 3393a8617a8SJordan K. Hubbard.RS 3403a8617a8SJordan K. HubbardCAUTION: The only reliable ways to discover 3413a8617a8SJordan K. Hubbardwhether Underflow has occurred are to test whether 3423a8617a8SJordan K. Hubbardproducts or quotients lie closer to zero than the 3433a8617a8SJordan K. Hubbardunderflow threshold, or to test the Underflow 3443a8617a8SJordan K. Hubbardflag. (Sums and differences cannot underflow in 3453a8617a8SJordan K. HubbardIEEE 754; if x 3463a8617a8SJordan K. Hubbard.if n \ 3473a8617a8SJordan K. Hubbard!= 3483a8617a8SJordan K. Hubbard.if t \ 3493a8617a8SJordan K. Hubbard\(!= 3503a8617a8SJordan K. Hubbardy then x\-y is correct to 3513a8617a8SJordan K. Hubbardfull precision and certainly nonzero regardless of 3523a8617a8SJordan K. Hubbardhow tiny it may be.) Products and quotients that 3533a8617a8SJordan K. Hubbardunderflow gradually can lose accuracy gradually 3543a8617a8SJordan K. Hubbardwithout vanishing, so comparing them with zero 3553a8617a8SJordan K. Hubbard(as one might on a VAX) will not reveal the loss. 3563a8617a8SJordan K. HubbardFortunately, if a gradually underflowed value is 3573a8617a8SJordan K. Hubbarddestined to be added to something bigger than the 3583a8617a8SJordan K. Hubbardunderflow threshold, as is almost always the case, 3593a8617a8SJordan K. Hubbarddigits lost to gradual underflow will not be missed 3603a8617a8SJordan K. Hubbardbecause they would have been rounded off anyway. 3613a8617a8SJordan K. HubbardSo gradual underflows are usually \fIprovably\fR ignorable. 3623a8617a8SJordan K. HubbardThe same cannot be said of underflows flushed to 0. 3633a8617a8SJordan K. Hubbard.RE 3642a6bf1faSDavid Schultz.El 3652a6bf1faSDavid Schultz.Pp 3663a8617a8SJordan K. HubbardAt the option of an implementor conforming to IEEE 754, 3673a8617a8SJordan K. Hubbardother ways to cope with exceptions may be provided: 3682a6bf1faSDavid Schultz.Bl -hang -width 3n 3692a6bf1faSDavid Schultz.It 4. 3703a8617a8SJordan K. HubbardABORT. This mechanism classifies an exception in 3713a8617a8SJordan K. Hubbardadvance as an incident to be handled by means 3723a8617a8SJordan K. Hubbardtraditionally associated with error\-handling 3733a8617a8SJordan K. Hubbardstatements like "ON ERROR GO TO ...". Different 3743a8617a8SJordan K. Hubbardlanguages offer different forms of this statement, 3753a8617a8SJordan K. Hubbardbut most share the following characteristics: 3762a6bf1faSDavid Schultz.Bl -dash 3772a6bf1faSDavid Schultz.It 3783a8617a8SJordan K. HubbardNo means is provided to substitute a value for 3793a8617a8SJordan K. Hubbardthe offending operation's result and resume 3803a8617a8SJordan K. Hubbardcomputation from what may be the middle of an 3813a8617a8SJordan K. Hubbardexpression. An exceptional result is abandoned. 3822a6bf1faSDavid Schultz.It 3833a8617a8SJordan K. HubbardIn a subprogram that lacks an error\-handling 3843a8617a8SJordan K. Hubbardstatement, an exception causes the subprogram to 3853a8617a8SJordan K. Hubbardabort within whatever program called it, and so 3863a8617a8SJordan K. Hubbardon back up the chain of calling subprograms until 3873a8617a8SJordan K. Hubbardan error\-handling statement is encountered or the 3883a8617a8SJordan K. Hubbardwhole task is aborted and memory is dumped. 3892a6bf1faSDavid Schultz.El 3902a6bf1faSDavid Schultz.It 5. 3913a8617a8SJordan K. HubbardSTOP. This mechanism, requiring an interactive 3923a8617a8SJordan K. Hubbarddebugging environment, is more for the programmer 3933a8617a8SJordan K. Hubbardthan the program. It classifies an exception in 3943a8617a8SJordan K. Hubbardadvance as a symptom of a programmer's error; the 3953a8617a8SJordan K. Hubbardexception suspends execution as near as it can to 3963a8617a8SJordan K. Hubbardthe offending operation so that the programmer can 3973a8617a8SJordan K. Hubbardlook around to see how it happened. Quite often 3983a8617a8SJordan K. Hubbardthe first several exceptions turn out to be quite 3993a8617a8SJordan K. Hubbardunexceptionable, so the programmer ought ideally 4003a8617a8SJordan K. Hubbardto be able to resume execution after each one as if 4013a8617a8SJordan K. Hubbardexecution had not been stopped. 4022a6bf1faSDavid Schultz.It 6. 4033a8617a8SJordan K. Hubbard\&... Other ways lie beyond the scope of this document. 4042a6bf1faSDavid Schultz.El 4052a6bf1faSDavid Schultz.Ed 4062a6bf1faSDavid Schultz.Pp 4072a6bf1faSDavid SchultzIdeally, each 4083a8617a8SJordan K. Hubbardelementary function should act as if it were indivisible, or 4093a8617a8SJordan K. Hubbardatomic, in the sense that ... 4102a6bf1faSDavid Schultz.Bl -tag -width "iii)" 4112a6bf1faSDavid Schultz.It i) 4123a8617a8SJordan K. HubbardNo exception should be signaled that is not deserved by 4133a8617a8SJordan K. Hubbardthe data supplied to that function. 4142a6bf1faSDavid Schultz.It ii) 4153a8617a8SJordan K. HubbardAny exception signaled should be identified with that 4163a8617a8SJordan K. Hubbardfunction rather than with one of its subroutines. 4172a6bf1faSDavid Schultz.It iii) 4183a8617a8SJordan K. HubbardThe internal behavior of an atomic function should not 4193a8617a8SJordan K. Hubbardbe disrupted when a calling program changes from 4203a8617a8SJordan K. Hubbardone to another of the five or so ways of handling 4213a8617a8SJordan K. Hubbardexceptions listed above, although the definition 4223a8617a8SJordan K. Hubbardof the function may be correlated intentionally 4233a8617a8SJordan K. Hubbardwith exception handling. 4242a6bf1faSDavid Schultz.El 4252a6bf1faSDavid Schultz.Pp 4262a6bf1faSDavid SchultzThe functions in \fIlibm\fR are only approximately atomic. 4272a6bf1faSDavid SchultzThey signal no inappropriate exception except possibly ... 4282a6bf1faSDavid Schultz.Bd -filled -offset indent -compact 4293a8617a8SJordan K. HubbardOver/Underflow 4302a6bf1faSDavid Schultz.Bd -filled -offset indent -compact 4313a8617a8SJordan K. Hubbardwhen a result, if properly computed, might have lain barely within range, and 4322a6bf1faSDavid Schultz.Ed 4333a8617a8SJordan K. HubbardInexact in \fIcabs\fR, \fIcbrt\fR, \fIhypot\fR, \fIlog10\fR and \fIpow\fR 4342a6bf1faSDavid Schultz.Bd -filled -offset indent -compact 4353a8617a8SJordan K. Hubbardwhen it happens to be exact, thanks to fortuitous cancellation of errors. 4362a6bf1faSDavid Schultz.Ed 4372a6bf1faSDavid Schultz.Ed 4383a8617a8SJordan K. HubbardOtherwise, ... 4392a6bf1faSDavid Schultz.Bd -filled -offset indent -compact 4403a8617a8SJordan K. HubbardInvalid Operation is signaled only when 4412a6bf1faSDavid Schultz.Bd -filled -offset indent -compact 4422a6bf1faSDavid Schultzany result but \*(Na would probably be misleading. 4432a6bf1faSDavid Schultz.Ed 4443a8617a8SJordan K. HubbardOverflow is signaled only when 4452a6bf1faSDavid Schultz.Bd -filled -offset indent -compact 4463a8617a8SJordan K. Hubbardthe exact result would be finite but beyond the overflow threshold. 4472a6bf1faSDavid Schultz.Ed 4483a8617a8SJordan K. HubbardDivide\-by\-Zero is signaled only when 4492a6bf1faSDavid Schultz.Bd -filled -offset indent -compact 4503a8617a8SJordan K. Hubbarda function takes exactly infinite values at finite operands. 4512a6bf1faSDavid Schultz.Ed 4523a8617a8SJordan K. HubbardUnderflow is signaled only when 4532a6bf1faSDavid Schultz.Bd -filled -offset indent -compact 4543a8617a8SJordan K. Hubbardthe exact result would be nonzero but tinier than the underflow threshold. 4552a6bf1faSDavid Schultz.Ed 4563a8617a8SJordan K. HubbardInexact is signaled only when 4572a6bf1faSDavid Schultz.Bd -filled -offset indent -compact 4583a8617a8SJordan K. Hubbardgreater range or precision would be needed to represent the exact result. 4592a6bf1faSDavid Schultz.Ed 4602a6bf1faSDavid Schultz.Ed 4612a6bf1faSDavid Schultz.Sh BUGS 4622a6bf1faSDavid SchultzSeveral functions required by 4632a6bf1faSDavid Schultz.St -isoC-99 4642a6bf1faSDavid Schultzare missing, and many functions are not available in their 4652a6bf1faSDavid Schultz.Vt long double 4662a6bf1faSDavid Schultzvariants. 467dbc8f2b5SDavid Schultz.Pp 468dbc8f2b5SDavid SchultzOn some architectures, trigonometric argument reduction is not 469dbc8f2b5SDavid Schultzperformed accurately, resulting in errors greater than 1 ulp for large 470dbc8f2b5SDavid Schultzarguments to 471dbc8f2b5SDavid Schultz.Fn cos , 472dbc8f2b5SDavid Schultz.Fn sin , 473dbc8f2b5SDavid Schultzand 474dbc8f2b5SDavid Schultz.Fn tan . 4752a6bf1faSDavid Schultz.Sh SEE ALSO 4762a6bf1faSDavid Schultz.Xr fenv 3 , 4772a6bf1faSDavid Schultz.Xr ieee 3 4782a6bf1faSDavid Schultz.Pp 4793a8617a8SJordan K. HubbardAn explanation of IEEE 754 and its proposed extension p854 4803a8617a8SJordan K. Hubbardwas published in the IEEE magazine MICRO in August 1984 under 4813a8617a8SJordan K. Hubbardthe title "A Proposed Radix\- and Word\-length\-independent 4823a8617a8SJordan K. HubbardStandard for Floating\-point Arithmetic" by W. J. Cody et al. 4833a8617a8SJordan K. HubbardThe manuals for Pascal, C and BASIC on the Apple Macintosh 4843a8617a8SJordan K. Hubbarddocument the features of IEEE 754 pretty well. 4852a6bf1faSDavid SchultzArticles in the IEEE magazine COMPUTER vol. 14 no. 3 (Mar.\& 4863a8617a8SJordan K. Hubbard1981), and in the ACM SIGNUM Newsletter Special Issue of 4873a8617a8SJordan K. HubbardOct. 1979, may be helpful although they pertain to 4883a8617a8SJordan K. Hubbardsuperseded drafts of the standard. 4892a6bf1faSDavid Schultz.Sh HISTORY 4902a6bf1faSDavid SchultzA math library with many of the present functions appeared in 4912a6bf1faSDavid SchultzVersion 7 AT&T UNIX. 4922a6bf1faSDavid SchultzThe library was substantially rewritten for 4.3BSD to provide 4932a6bf1faSDavid Schultzbetter accuracy and speed on machines supporting either VAX 4942a6bf1faSDavid Schultzor IEEE 754 floating-point. 4952a6bf1faSDavid SchultzMost of this library was replaced with FDLIBM, developed at Sun 4962a6bf1faSDavid SchultzMicrosystems, in 4972a6bf1faSDavid Schultz.Fx 1.1.5 . 498