ieee(3) — Subroutines
Digital
NAME
ieee, copysign, drem, finite, logb, scalb, IEEE − copysign, remainder, exponent manipulations
SYNOPSIS
#include <math.h>
double copysign (
double x, double y);
double drem (
double x, double y);
int finite (
double x);
double logb (
double x);
double scalb (
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 −∞ < x < +∞,
= 0 otherwise(when |x| = ∞ 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 or |x| = ∞ or x lies between 0 and the Underflow Threshold.
Scalb(x,n) = x∗(2∗∗n) computed, for integer n, without first computing 2∗∗n.
ERRORS
IEEE 754 defines drem(x,0) and drem(∞,y) to be invalid operations that produce a NaN.
IEEE 754 defines logb(±∞) = +∞ and logb(0) = −∞, and requires the latter to signal Division−by−Zero.
RELATED INFORMATION
floor(3), fp_class(3), math(3)
AUTHOR
Kwok−Choi Ng
RESTRICTIONS
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, ∞ and NaN. Almost every program that assumes 754’s specification will work correctly if logb follows 854’s specification instead.
IEEE 754 requires copysign(x,NaN) = ±x but says nothing else about the sign of a NaN.