#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;
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.
IEEE 754 defines logb(±infinity) = +infinity and logb(0) = -infinity, requires the latter to signal Division-by-Zero.
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,