IEEE(3M)IEEE(3M)NAME
copysign, drem, finite, logb, scalb - copysign, remainder, exponent
manipulations
SYNOPSIS
#include <math.h>
double copysign(x,y)
double x,y;
double drem(x,y)
double x,y;
int finite(x)
double x;
double logb(x)
double x;
double scalb(x,n)
double x;
int n;
DESCRIPTION
These functions are required for, or recommended by the IEEE standard
754 for floating-point arithmetic.
Copysign(x,y) returns x with its sign changed to y's.
Drem(x,y) returns the remainder r := x - n∗y where n is the integer
nearest the exact value of x/y; moreover if |n-x/y|=1/2 then n is even.
Consequently the remainder is computed exactly and |r| ≤ |y|/2. But
drem(x,0) is exceptional; see below under DIAGNOSTICS.
Finite(x) = 1 just when -infinity < x < +infinity,
= 0 otherwise (when |x| = infinity or x is NaN or
Logb(x) returns x's exponent n, a signed integer converted to
double-precision floating-point and so chosen that 1 ≤ |x|/2**n < 2
unless x = 0 or (only on machines that conform to IEEE 754) |x| =
infinity or x lies between 0 and the Underflow Threshold; see below
under "BUGS".
Scalb(x,n) = x∗(2**n) computed, for integer n, without first computing
2**n.
DIAGNOSTICSIEEE 754 defines drem(x,0) and drem(infinity,y) to be invalid
operations that produce a NaN.
IEEE 754 defines logb(±infinity) = +infinity and logb(0) = -infinity,
requires the latter to signal Division-by-Zero.
SEE ALSOfloor(3M), math(3M)AUTHOR
Kwok-Choi Ng
BUGSIEEE 754 currently specifies that logb(denormalized no.) = logb(tiniest
normalized no. > 0) but the consensus has changed to the specification
in the new proposed IEEE standard p854, namely that logb(x) satisfy
1 ≤ scalb(|x|,-logb(x)) < Radix ... = 2 for IEEE 754
for every x except 0, infinity and NaN. Almost every program that
assumes 754's specification will work correctly if logb follows 854's
specification instead.
IEEE 754 requires copysign(x,NaN) = ±x but says nothing else about the
sign of a NaN. A NaN (Not a Number) is similar in spirit to the VAX's
reserved operand, but very different in important details. Since the
sign bit of a reserved operand makes it look negative,
copysign(x,reserved operand) = -x;
should this return the reserved operand instead?
4.3 Berkeley Distribution May 12, 1986 IEEE(3M)