## Linux and UNIX Man Pages

Test Your Knowledge in Computers #1008
Difficulty: Medium
A power series will converge for some values of the variable x and may diverge for others.
True or False?

# scalb(3m) [bsd man page]

```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
x is the VAX's reserved operand.)

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.

DIAGNOSTICS
IEEE  754 defines drem(x,0) and drem(infinity,y) to be invalid operations that produce a NaN.  On a VAX, drem(x,0) returns the reserved op-
erand.  No infinity exists on a VAX.

IEEE 754 defines logb(+-infinity) = +infinity and logb(0) = -infinity, requires the latter to  signal  Division-by-Zero.   But  on  a  VAX,
logb(0)	= 1.0 - 2.0**31 = -2,147,483,647.0.  And if the correct value of scalb(x,n) would overflow on a VAX, it returns the reserved oper-
and and sets errno to ERANGE.

floor(3M), math(3M), infnan(3M)

AUTHOR
Kwok-Choi Ng

BUGS
Should drem(x,0) and logb(0) on a VAX signal invalidity by setting errno = EDOM?  Should  logb(0) return  -1.7e38?

IEEE 754 currently specifies that logb(denormalized no.) = logb(tiniest normalized no. > 0) but the consensus has changed to the specifica-
tion 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

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)```

## Check Out this Related Man Page

```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
x is the VAX's reserved operand.)

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.

DIAGNOSTICS
IEEE  754 defines drem(x,0) and drem(infinity,y) to be invalid operations that produce a NaN.  On a VAX, drem(x,0) returns the reserved op-
erand.  No infinity exists on a VAX.

IEEE 754 defines logb(+-infinity) = +infinity and logb(0) = -infinity, requires the latter to  signal  Division-by-Zero.   But  on  a  VAX,
logb(0)	= 1.0 - 2.0**31 = -2,147,483,647.0.  And if the correct value of scalb(x,n) would overflow on a VAX, it returns the reserved oper-
and and sets errno to ERANGE.

floor(3M), math(3M), infnan(3M)

AUTHOR
Kwok-Choi Ng

BUGS
Should drem(x,0) and logb(0) on a VAX signal invalidity by setting errno = EDOM?  Should  logb(0) return  -1.7e38?

IEEE 754 currently specifies that logb(denormalized no.) = logb(tiniest normalized no. > 0) but the consensus has changed to the specifica-
tion 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