FPGETMASK(3)

FPGETMASK(3) | Library Functions Manual | FPGETMASK(3)

# NAME

`fpgetmask`, `fpgetprec`, `fpgetround`, `fpgetsticky`, `fpsetmask`, `fpsetprec`, `fpsetround`, `fpsetsticky` —
IEEE FP mode control

# LIBRARY

Standard C Library (libc, -lc)

# SYNOPSIS

`#include <ieeefp.h>`

fp_except_t
`fpgetmask`(void);

fp_prec_t
`fpgetprec`(void);

fp_rnd_t
`fpgetround`(void);

fp_except_t
`fpgetsticky`(void);

fp_except_t
`fpsetmask`(fp_except_t mask);

fp_prec_t
`fpsetprec`(fp_prec_t prec);

fp_rnd_t
`fpsetround`(fp_rnd_t rnd_dir);

fp_except_t
`fpsetsticky`(fp_except_t sticky);

# DESCRIPTION

A rounding mode fp_rnd_t is one of:

`FP_RZ` | rounding towards zero
`FP_RM` | rounding down to (Minus infinity)
`FP_RN` | rounding to nearest
`FP_RP` | rounding down to (Plus infinity)

The default mode is `FP_RN`.

An fp_except_t value is a bitmask specifying an exception type and containing any of the values listed below.

`FP_X_INV` | Invalid Operation
`FP_X_DZ` | Division by zero
`FP_X_OFL` | Overflow
`FP_X_UFL` | Underflow
`FP_X_IMP` | Imprecision (inexact)
`FP_X_IOV` | Integer Overflow

An fp_prec_t specifies the precision of the floating point operations listed below.

`FP_PS` | `24 bit (single-precision)`
`FP_PRS` | reserved
`FP_PD` | `53 bit (double-precision)`
`FP_PE` | `64 bit (extended-precision)`

The `fpsetmask`() function will set the current exception mask, i.e., it will cause future operations with the specified result status to raise the `SIGFPE` exception. The `fpgetmask`() function will return the current exception mask.

The `fpgetprec`() function will return the current floating point precision. The `fpsetprec`() function will set the floating point precision and will return the previous precision.

The `fpsetround`() function will cause future operations to use the specified dynamic rounding mode. The `fpgetround`() function will return the current rounding mode.

Note:
  On some architectures, instructions can optionally specify static rounding modes and exception enables that will supersede the specified dynamic mode. On other architectures, these features may not be fully supported.

A “sticky” status word may be maintained in which a bit is set every time an exceptional floating point condition is encountered, whether or not a `SIGFPE` is generated. The `fpsetsticky`() function will set or clear the specified exception history bits. The `fpgetsticky`() function will return the exception history bits.

# RETURN VALUES

The `fpgetround`() and `fpsetround`() functions return the (previous) rounding mode. The `fpgetmask`(), `fpsetmask`(), `fpgetsticky`(), and `fpsetsticky`() functions return the (previous) exception mask and exception history bits.

# SEE ALSO

sigaction(2), fenv(3)

# BUGS

There is no way to return an unsupported value. Not all processors support all the modes. These interfaces are deprecated and the ones in fenv(3) should be used, although the interfaces in fenv(3) don't support getting or setting the precision.

March 26, 2011 | NetBSD 9.5