Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

floor(3M)

math(3M)

matherr(3M)

IEEE(3M)                             BSD                              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\f1(**(2**n) computed, for integer n, without first
     computing 2**n.

SEE ALSO
     floor(3M), math(3M), matherr(3M)

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.

BUGS
     IEEE 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.

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026