Computes certain binary floating-point arithmetic functions.
IEEE Math Library (libm.a)
or System V Math Library (libmsaa.a)
#include <math.h> #include <float.h>
double copysign (x, y) double x, y;
double nextafter (x, y) double x, y;
double scalb(x, y) double x, y;
double logb(x) double x;
int ilogb (x) double x;
These subroutines compute certain functions recommended in the IEEE Standard for Binary Floating-Point Arithmetic. The other such recommended function is provided in the class subroutine.
The copysign subroutine returns the x parameter with the same sign as the y parameter.
The nextafter subroutine returns the next representable neighbor of the x parameter in the direction of the y parameter. If x equals y, the result is the x parameter.
The scalb subroutine returns the value of the x parameter times 2 to the power of the y parameter.
The logb subroutine returns a floating-point double that is equal to the unbiased exponent of the x parameter. Special cases are:
logb (NaN) = NaNQ logb (infinity) = +INF logb (0) = -INF
Note: When the x parameter is finite and not zero, then the logb (x) subroutine satisfies the following equation:1 < = scalb (|x|, -(int) logb (x)) < 2
The ilogb subroutine returns an integer that is equal to the unbiased exponent of the x parameter. Special cases are:
ilogb (NaN) = LONG_MIN ilogb (INF) = LONG_MAX ilogb (0) = LONG_MIN
Compile any routine that uses subroutines from the libm.a library with the -lm flag. For example: to compile the copysign.c file, enter:
cc copysign.c -lm
x | Specifies a double-precision floating-point value. |
y | Specifies a double-precision floating-point value. |
The nextafter subroutine sets the overflow bit in the floating-point exception status when the x parameter is finite but the nextafter (x, y) subroutine is infinite. Similarly, when the nextafter subroutine is denormalized, the underflow exception status flag is set.
The logb(0) subroutine returns an -INF value and sets the division-by-zero exception status flag.
The ilogb(0) subroutine returns a LONG_MIN value and sets the division-by-zero exception status flag.
If the correct value would overflow, the scalb subroutine returns +/-INF (depending on a negative or positive value of the x parameter) and sets errno to ERANGE.
If the correct value would underflow, the scalb subroutine returns a value of 0 and sets errno to ERANGE.
The logb function returns -HUGE_VAL when the x parameter is set to a value of 0 and sets errno to EDOM.
For the nextafter subroutine, if the x parameter is finite and the correct function value would overflow, HUGE_VAL is returned and errno is set to ERANGE.