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)

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, +-infinity or a NaN.

Scalb(x,n) = x*(2**n) computed,
for integer n, without first

computing 2**n.

DIAGNOSTICS

IEEE 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 ALSO

floor(3), libm(3)

AUTHOR

Kwok-Choi Ng