DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

fpgetround(S-osr5)


fpgetround, fpsetround, fpgetmask, fpsetmask, fpgetsticky, fpsetsticky -- IEEE floating point environment control

Syntax

cc . . . -lc

#include  <ieeefp.h>

typedef enum {

FP_RN=0, /* round to nearest */ FP_RM=1, /* round toward minus infinity */ FP_RP=2, /* round toward plus infinity */ FP_RZ=3 /* round to zero (truncate) */

} fp_rnd;

fp_rnd fpgetround()

fp_rnd fpsetround(rnd_dir) fp_rnd rnd_dir;

#define fp_except int #define FP_X_INV 0x01 /* invalid operation exception*/ #define FP_X_OFL 0x08 /* overflow exception*/ #define FP_X_UFL 0x10 /* underflow exception*/ #define FP_X_DZ 0x04 /* divide-by-zero exception*/ #define FP_X_IMP 0x20 /* imprecise (loss of precision)*/ #define FP_X_DNML 0x02 /* denormalization exception */

fp_except fpgetmask()

fp_except fpsetmask(mask) fp_except mask;

fp_except fpgetsticky()

fp_except fpsetsticky(sticky) fp_except sticky;

Description

There are six floating point exceptions: divide-by-zero, overflow, underflow, imprecise (inexact) result, denormalization, and invalid operation. When a floating point exception occurs, the corresponding sticky bit is set; if the mask bit is enabled, the trap takes place. These routines let the user change the behavior if any of these exceptions occur, as well as change the rounding mode for floating point operations.


fpgetround
returns the current rounding mode.

fpsetround
sets the rounding mode and returns the previous rounding mode.

fpgetmask
returns the current exception masks.

fpsetmask
sets the exception masks and returns the previous setting.

fpgetsticky
returns the current exception sticky flags.

fpsetsticky
sets (clears) the exception sticky flags and returns the previous setting.
The default environment on the Intel 80386 processor family is:

Rounding mode set to nearest (FP_RN),
Divide-by-zero, Floating point overflow, and
Invalid operation traps enabled.

See also

isnan(S-osr5)

Warnings

fpsetsticky modifies all sticky flags. fpsetmask changes all mask bits.

C requires truncation (round to zero) for floating point to integral conversions. The current rounding mode has no effect on these conversions.

Notes

You must clear the sticky bit to recover from the trap and to proceed. If the sticky bit is not cleared before the next floating point instruction is executed, a wrong exception type may be signaled.

When you call fpsetmask make sure that the sticky bit corresponding to the enabled exception is cleared.

Standards conformance

fpgetround is not part of any currently supported standard; it is an extension of AT&T System V provided by the Santa Cruz Operation.
© 2005 The SCO Group, Inc. All rights reserved.
SCO OpenServer Release 6.0.0 -- 02 June 2005