[Top] [Prev] [Next] [Bottom]
fp - floating point operations
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;
Description
These constants and functions provide control over rounding modes, exceptions, and other properties of floating point arithmetic.
Infinity
NaN
|
Infinity and NaN are constants containing the positive infinity and quiet not-a-number values of the IEEE binary floating point standard, double precision.
|
MachEps
|
The constant MachEps is 2-52, the smallest e such that 1+e is not equal to 1.
|
Pi
|
Pi is the nearest machine number to the infinitely precise value.
|
Degree
|
Degree is Pi/180.
|
FPcontrol (r, mask)
FPstatus (r, mask)
|
Each thread has a floating point control word that governs rounding mode and whether a particular floating point exception causes a trap. It also has a floating point status word that stores accumulated exception flags. The functions FPcontrol and FPstatus copy bits to the control or status word, in positions specified by mask, returning the previous values of the bits specified in the mask.
|
getFPcontrol ( ) getFPstatus ( )
|
The functions getFPcontrol and getFPstatus return the words unchanged.
|
Constants for non-overlapping single-bit masks are provided for use in arguments or return values. They stand for the five IEEE exceptions:
INVAL
|
invalid operation
|
0/0, 0+NaN, Infinity-Infinity, or sqrt(-1)
|
ZDIV
|
division by zero
|
1/0
|
OVFL
|
overflow
|
1.8e308
|
UNFL
|
underflow
|
1.1e-308
|
INEX
|
inexact
|
.3*.3
|
By default, INEX is quiet, OVFL, UNFL, and ZDIV are fatal, and rounding is to nearest even number. Limbo modules are entitled to assume this, and if they need to use quiet OVFL, UNFL, or ZDIV, they must either set and restore the control register or clearly document that the modules that call them must do so.
Constants (distinct bit patterns) are defined for interfacing with the floating point control word.
RND_NR
|
round to nearest even
|
RND_NINF
|
round toward negative infinity
|
RND_PINF
|
round toward infinity
|
RND_Z
|
round toward zero
|
Any of the above constants can be set or extracted from the floating point control word using RND_MASK. Several examples follow:
FPcontrol(0, UNFL);
|
Make underflow silent.
|
FPstatus(0, INEX);
|
Check and clear the inexact flag.
|
FPcontrol (RND_PINF, RND_MASK);
|
Set directed rounding.
|
ilogb (x)
|
The ilogb function returns the nearest integral logarithm base 2 of the absolute value of x: for positive finite x,
<= x*2-ilogb(x)< 2, and ilogb(-x) = ilogb(x).
|
scalbn (x, n)
|
The scalbn function returns a scaled power of two:
x *2 n.
|
copysign (x, s)
|
The copysign function returns the magnitude of x and the sign bit of s.
|
nextafter (x, y)
|
The nextafter function returns the machine number nearest x closer to y.
|
finite (x)
|
The finite function returns 0 if x is NaN or Infinity, and 1 otherwise.
|
isnan (x)
|
The isnan function returns 1 if x is NaN, and 0 otherwise.
|
fdim (x, y)
|
The fdim function equals x - y if x is greater than y, otherwise it is 0.
|
fmin (x, y)
|
The minimum of x and y.
|
fmax (x, y)
|
The maximum of x and y.
|
fabs (x)
|
The absolute value of x.
|
ceil (x)
|
The ceiling (round-up) of x.
|
floor (x)
|
The floor (round-down) of x.
|
remainder (x, y)
|
The remainder function conforms to the IEEE standard which gives a remainder of magnitude no more than half the magnitude of y.
|
fmod (x, y)
|
The fmod function conforms to the C language standard. It returns the value x - i *y for some i such that the remainder has the sign of x and magnitude less than the magnitude of y.
|
modf (x)
|
The modf function breaks x into integer and fractional parts returned in a tuple.
|
rint (x)
|
The rint function rounds to an integer, following the rounding mode specified in the floating point control word.
|
[Top] [Prev] [Next] [Bottom]
infernosupport@lucent.com
Copyright © 1997, Lucent Technologies, Inc.. All rights
reserved.