diff options
Diffstat (limited to 'man/2/math-fp')
| -rw-r--r-- | man/2/math-fp | 205 |
1 files changed, 205 insertions, 0 deletions
diff --git a/man/2/math-fp b/man/2/math-fp new file mode 100644 index 00000000..a67b1377 --- /dev/null +++ b/man/2/math-fp @@ -0,0 +1,205 @@ +.TH MATH-FP 2 +.SH NAME +math-fp \- floating point +.SH SYNOPSIS +.EX +include "math.m"; +math := load Math Math->PATH; + +Infinity, NaN, MachEps, Pi, Degree: real; +INVAL, ZDIV, OVFL, UNFL, INEX: int; +RND_NR, RND_NINF, RND_PINF, RND_Z, RND_MASK: int; + +getFPcontrol, getFPstatus: fn(): int; +FPcontrol, FPstatus: fn(r, mask: int): int; +ilogb: fn(x: real): int; +scalbn: fn(x: real, n: int): real; +copysign: fn(x, s: real): real; +finite, isnan: fn(x: real): int; +nextafter: fn(x, y: real): real; + +fdim, fmin, fmax: fn(x, y: real): real; +fabs: fn(x: real): real; +ceil, floor: fn(x: real): real; +remainder: fn(x, p: real): real; +fmod: fn(x, y: real): real; +modf: fn(x: real): (int,real); +rint: fn(x: real): real; +.EE +.SH DESCRIPTION +These constants and functions provide control over rounding modes, +exceptions, and other properties of floating point arithmetic. +.PP +.B Infinity +and +.B NaN +are constants containing +the positive infinity and quiet not-a-number values +of the IEEE binary floating point standard, double precision. +.B MachEps +is 2\u\s-2-52\s0\d, the smallest +.I e +such that 1+\f2e\f1 is not equal to 1. +.B Pi +is the nearest machine number to the infinitely precise value. +.B Degree +is +.BR Pi/ 180. +.PP +Each thread has a floating point control word (governing rounding mode and +whether a particular floating point exception causes a trap) +and a floating point status word (storing accumulated exception flags). +The functions +.B FPcontrol +and +.B FPstatus +copy bits to the control or status word, +in positions specified by a mask, returning the previous values of the bits +specified in the mask. +The functions +.B getFPcontrol +and +.B getFPstatus +return the words unchanged. +.PP +.BR INVAL , +.BR ZDIV , +.BR OVFL , +.BR UNFL , +and +.B INEX +are non-overlapping single-bit masks +used to compose arguments or return values. +They stand for the five IEEE exceptions: +`invalid operation' (0/0,0+NaN,Infinity-Infinity,sqrt(-1)), +`division by zero' (1/0), `overflow' (1.8e308), `underflow' (1.1e-308), +and `inexact' (.3*.3). +.PP +.BR RND_NR , +.BR RND_NINF , +.BR RND_PINF , +and +.BR RND_Z +are distinct bit patterns +for `round to nearest even', `round toward negative infinity', +`round toward infinity', and `round toward 0', +any of which can be set or extracted from the floating point control +word using +.BR RND_MASK . +For example, +.B FPcontrol(0, +.B UNFL) +makes underflow silent; +.B FPstatus(0, +.B INEX) +checks and clears the inexact flag; and +.B FPcontrol(RND_PINF, +.B RND_MASK) +sets directed rounding. +.PP +By default, +.B INEX +is quiet, +.BR OVFL , +.BR UNFL , +and +.B ZDIV +are fatal, +and rounding is to nearest even. +Limbo modules are +entitled to assume this, and if they wish to use quiet +underflow, overflow, or zero-divide, they must either +set and restore the control register or clearly document that +their caller must do so. +.PP +The +.B ilogb +function +returns the nearest integral logarithm base 2 of the absolute value of +.IR x: +for positive finite +.IR x , +1 \(<= +.IB x *2\u-\s-2ilogb( x )\s0\d +< 2, +and +.BI ilogb(- x ) +.B = +.BI ilogb( x )\f1. +.BI Scalbn( x , n ) +is a scaled power of two: +.IB x *2\u\s-2n\s0\d\f1. +.BI Copysign( x , s ) +has the magnitude of +.I x +and the +sign bit of +.IR s . +.BI Nextafter( x , y ) +is the machine number nearest x closer to y. +Finally, +.BI finite( x ) +is 0 if +.I x +is +.B Nan +or +.B Infinity, +1 otherwise, and +.BI isnan( x ) +is 1 if +.I x +is +.B Nan +and 0 otherwise. +.PP +The function +.BI fdim( x , y) += +.IB x - y +if +.I x +is greater than +.IR y , +otherwise it is 0. +The functions +.BR fmin , +.BR fmax , +.BR fabs , +.BR ceil , +and +.B floor +are the +customary minimum, +maximum, +absolute value, +and integer rounding routines. +.PP +There are two functions for computing the modulus: +.BI fmod( x , y ) +is the function defined by the C standard which gives the value +.IB x - i*y +for some +.I i +such that the remainder has the sign of +.I x +and magnitude less than the magnitude of +.IR y , +while +.BI remainder( x , y ) +is the function defined by the IEEE standard +which gives a remainder of magnitude no more than half the +magnitude of +.IR y . +The function +.BI modf( x ) +breaks +.I x +into integer and fractional parts returned in a tuple, and +.B rint +rounds to an integer, following the +rounding mode specified in the floating point control word. +.SH SOURCE +.B /libinterp/math.c +.SH SEE ALSO +.IR math-intro (2) |
