FREXP(3M) — MATHEMATICAL LIBRARY
NAME
frexp, modf, ldexp − traditional UNIX functions
SYNOPSIS
#include <math.h>
double frexp(value, eptr)
double value;
int ∗eptr;
double ldexp(x,n)
double x;
int n;
double modf(value, iptr)
double value, ∗iptr;
DESCRIPTION
These functions are provided for compatibility with other UNIX system implementations. They are not used internally in libm or libc. Better ways to accomplish similar ends may be found in ieee_functions(3M) and rint(3M).
ldexp(x,n) returns x ∗ 2∗∗n computed by exponent manipulation rather than by actually performing an exponentiation or a multiplication. Note: ldexp(x,n) differs from scalbn(x,n), defined in ieee_functions(3M), only that in the event of IEEE overflow and underflow, ldexp(x,n) sets errno to ERANGE.
Every non-zero number can be written uniquely as x ∗ 2∗∗n, where the significand x is in the range 0.5 <= |x| < 1.0 and the exponent n is an integer. The function frexp() returns the significand of a double value as a double quantity, x, and stores the exponent n, indirectly through eptr. If value == 0, both results returned by frexp() are 0.
modf() returns the fractional part of value and stores the integral part indirectly through iptr. Thus the argument value and the returned values modf() and ∗iptr satisfy
(∗iptr + modf) == value
and both results have the same sign as value. The definition of modf() varies among UNIX system implementations, so avoid modf() in portable code.
The results of frexp() and modf() are not defined when value is an IEEE infinity or NaN.
SEE ALSO
Sun Release 4.0 — Last change: 21 January 1988