ieee man page on 4.4BSD

 Man page or keyword search:   man All Sections 1 - General Commands 2 - System Calls 3 - Subroutines, Functions 4 - Special Files 5 - File Formats 6 - Games and Screensavers 7 - Macros and Conventions 8 - Maintenence Commands 9 - Kernel Interface New Commands Server 4.4BSD AIX Alpinelinux Archlinux Aros BSDOS BSDi Bifrost CentOS Cygwin Darwin Debian DigitalUNIX DragonFly ElementaryOS Fedora FreeBSD Gentoo GhostBSD HP-UX Haiku Hurd IRIX Inferno JazzOS Kali Knoppix LinuxMint MacOSX Mageia Mandriva Manjaro Minix MirBSD NeXTSTEP NetBSD OPENSTEP OSF1 OpenBSD OpenDarwin OpenIndiana OpenMandriva OpenServer OpenSuSE OpenVMS Oracle PC-BSD Peanut Pidora Plan9 QNX Raspbian RedHat Scientific Slackware SmartOS Solaris SuSE SunOS Syllable Tru64 UNIXv7 Ubuntu Ultrix UnixWare Xenix YellowDog aLinux   1065 pages apropos Keyword Search (all sections) Output format html ascii pdf view pdf save postscript
[printable version]

```IEEE(3)			 BSD Library Functions Manual		       IEEE(3)

NAME
copysign, drem, finite, logb, scalb — IEEE 754 floating point support

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.

The copysign() function returns x with its sign changed to y's.

The drem() function 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.)

The finite() function returns the value 1 just when -∞ < x < +∞; other‐
wise a zero is returned (when |x| = ∞ or x is NaN or is the VAX's
reserved operand).

The logb() function 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| = ∞ or x
lies between 0 and the Underflow Threshold.  (See below under BUGS.)

The scalb() function returns x∗(2**n) computed, for integer n, without
first computing 2∗n.

RETURN VALUES
The IEEE standard 754 defines drem(x, 0) and drem(∞, y) to be invalid
operations that produce a NaN.  On the VAX, drem(x, 0) generates a
reserved operand fault.  No ∞ exists on a VAX.

IEEE 754 defines logb(±∞) = ∞ and logb(0) = -∞, and 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() would overflow on
a VAX, it generates a reserved operand fault and sets the global variable
errno to ERANGE.

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

HISTORY
The ieee functions appeared in 4.3BSD.

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

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	 June 4, 1993	     4.3 Berkeley Distribution
```
[top]

List of man pages available for 4.4BSD

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.