1IEEE(3M)                                                              IEEE(3M)
2
3
4

NAME

6       copysign,  drem,  finite,  logb,  scalb - copysign, remainder, exponent
7       manipulations
8

SYNOPSIS

10       #include <math.h>
11
12       double copysign(x,y)
13       double x,y;
14
15       double drem(x,y)
16       double x,y;
17
18       int finite(x)
19       double x;
20
21       double logb(x)
22       double x;
23
24       double scalb(x,n)
25       double x;
26       int n;
27

DESCRIPTION

29       These functions are required for, or recommended by the  IEEE  standard
30       754 for floating-point arithmetic.
31
32       Copysign(x,y) returns x with its sign changed to y's.
33
34       Drem(x,y)  returns  the  remainder  r := x - n∗y where n is the integer
35       nearest the exact value of x/y; moreover if |n-x/y|=1/2 then n is even.
36       Consequently  the  remainder  is computed exactly and |r| ≤ |y|/2.  But
37       drem(x,0) is exceptional; see below under DIAGNOSTICS.
38
39       Finite(x) = 1 just when -infinity < x < +infinity,
40                 = 0 otherwise (when |x| = infinity or x is NaN or
41                                x is the VAX's reserved operand.)
42
43       Logb(x) returns x's exponent n, a  signed  integer  converted  to  dou‐
44       ble-precision floating-point and so chosen that 1 ≤ |x|/2**n < 2 unless
45       x = 0 or (only on machines that conform to IEEE 754) |x| = infinity  or
46       x lies between 0 and the Underflow Threshold; see below under "BUGS".
47
48       Scalb(x,n)  = x∗(2**n) computed, for integer n, without first computing
49       2**n.
50

DIAGNOSTICS

52       IEEE 754 defines drem(x,0) and drem(infinity,y) to  be  invalid  opera‐
53       tions that produce a NaN.  On a VAX, drem(x,0) returns the reserved op‐
54       erand.  No infinity exists on a VAX.
55
56       IEEE 754 defines logb(±infinity) = +infinity and logb(0)  =  -infinity,
57       requires  the latter to signal Division-by-Zero.  But on a VAX, logb(0)
58       = 1.0 - 2.0**31 =  -2,147,483,647.0.   And  if  the  correct  value  of
59       scalb(x,n) would overflow on a VAX, it returns the reserved operand and
60       sets errno to ERANGE.
61

SEE ALSO

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

AUTHOR

66       Kwok-Choi Ng
67

BUGS

69       Should drem(x,0) and logb(0) on a  VAX  signal  invalidity  by  setting
70       errno = EDOM?  Should  logb(0) return  -1.7e38?
71
72       IEEE 754 currently specifies that logb(denormalized no.) = logb(tiniest
73       normalized no. > 0) but the consensus has changed to the  specification
74       in the new proposed IEEE standard p854, namely that logb(x) satisfy
75              1 ≤ scalb(|x|,-logb(x)) < Radix   ... = 2 for IEEE 754
76       for  every  x  except  0,  infinity and NaN.  Almost every program that
77       assumes 754's specification will work correctly if logb  follows  854's
78       specification instead.
79
80       IEEE 754 requires copysign(x,NaN) = ±x  but says nothing else about the
81       sign of a NaN.  A NaN (Not a Number) is similar in spirit to the  VAX's
82       reserved  operand,  but very different in important details.  Since the
83       sign bit of a reserved operand makes it look negative,
84              copysign(x,reserved operand) = -x;
85       should this return the reserved operand instead?
86
87
88
894.3 Berkeley Distribution        May 12, 1986                         IEEE(3M)
Impressum