Last update Sun Mar 4 12:00:58 2018

fltpnt.h

copysign

fltpnt.h
Prototype
double copysign(double x, double y);
float copysignf(float x, float y);
long double copysignl(long double x, long double y);
Description
These functions copy the sign bit of y into x, but do not trigger a signalling NaN.
Return Value
Returns x with the same sign as y.
Compatibility
DOS Windows 3.x Phar Lap DOSX Win32
Example
/* Example for copysign */

#include <stdio.h>
#include <fltpnt.h>

void main()
{
double result, x, y;

x = 0.34;
y = -1.9;
result = copysign(x, y);
printf("The result is %g\n", result);
}
Output
The result is -0.34

nearbyint

fltpnt.h
Prototype
double nearbyint(double x);
float nearbyintf(float x);
long double nearbyintl(long double x);
Description
Rounds x to the nearest integer value, using the current rounding mode. Unlike the rint functions, nearbyint does not raise the FE_INEXACT exception.
Return Value
x rounded to an integer value.
Compatibility
DOS Windows 3.x Phar Lap DOSX Win32
ceil floor rint rndtol rndtonl round trunc
Example
/* Example of nearbyint
Also demonstrates nearbyintf
*/

#include <stdlib.h>
#include <stdio.h>
#include <fltpnt.h>

void main()
{
double d;
printf("Enter a double: ");
scanf("%lg", &d);
printf("\nnearbyint(%g)=%g\n",
d, nearbyint (d));
}
Output
Enter a double: 3.14
nearbyint(3.14)= 3

nextafter

fltpnt.h
Prototype
double nextafter(double x, double y);
float nextafterf(float x, float y)
long double nextafterl(long double x, long double y);
Description
Calculates the next representable value after x in the direction of y.
Return Value
If y is greater than x, the result will be the next largest floating-point value; if y is less than x, the result will be the next smallest value. If x and y are equal, the result is x. The FE_INEXACT and FE_OVERFLOW exceptions will be raised if x is finite and the function result is infinite. The FE_INEXACT and FE_UNDERFLOW exceptions will be raised if the function value is subnormal, and x is not equal to y.
Compatibility
DOS Windows 3.x Phar Lap DOSX Win32
Example
/* Example for nextafter
Also demonstrates nextafterf
*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <fltpnt.h>

void main()
{
double d1, d2, r;
printf("Enter two doubles: ");
scanf("%lg %lg", &d1, &d2);

r = nextafter(d1, d2);
printf("nextafter(%g, %g)=%. 16f\n",
d1, d2, r);
}
Output
Enter two doubles: 1 2
nextafter(1, 2)= 1.0000000000000002

remainder

fltpnt.h
fltenv.h (required for exception values)
Prototype
double remainder(double x, double y);
float remainderf(float x, float y);
long double remainderl(long double x, long double y);
Description
Computes the remainder of x / y, following the IEEE standard.
Return Value
The value of x - y * n, where n is the integer nearest the exact value of x / y. If |n - x / y| == 0.5, n is even. If the result is zero, it has the same sign as x. Otherwise, the sign of the result is the sign of x / y. Precision mode has no affect on the remainder functions.

Special Results

x y return value invalid?
±0.0 not 0.0 ±0.0 no
±INFINITY anything NAN yes
anything ±0.0 NAN yes
!= ±INFINITY ±INFINITY x no
Compatibility
DOS Windows 3.x Phar Lap DOSX Win32
div ldiv fmod remquo
Example
/* Example for remainer
Also demonstrates remainderf
*/

#include <stdio.h>
#include <stdlib.h>
#include <fltpnt.h>

void main()
{
double d1, d2, r;
printf("Enter two doubles: ");
scanf("%lg %lg", &d1, &d2);

r = remainder(d1, d2);
printf("remainder(%g, %g)=%g\n",
d1, d2, r);
}
Output
Enter two doubles: 16 9
remainder(16, 9)= 7

remquo

fltpnt.h
fltenv.h (required for exception values)
Prototype
double remquo(double x, double y, int * quo);
float remquof(float x, float y, int * quo);
long double remquol(long double x, long double y, int * quo);
Description
Calculates the same value as the remainder functions, and places the integral quotient of x / y into the int pointed to by quo. For an x value much larger than y, this function may be unable to return an exact value for the quotient.
Return Value
The same value as remainder(x, y).

Special Results

x y returns quo invalid?
±0.0 not 0.0 ±0.0 0.0 no
±INFINITY anything NAN ? yes
anything ±0.0 NAN ? yes
!= ±INFINITY ±INFINITY x ? no
Compatibility
DOS Windows 3.x Phar Lap DOSX Win32
remainder
Example
/* Example for remquo
Also demonstrates remquof
*/

#include <stdio.h>
#include <stdlib.h>
#include <fltpnt.h>

void main()
{
double d1, d2, r;
int q;

printf("Enter two doubles: ");
scanf("%lg %lg", &d1, &d2);

r = remquo(d1, d2, &q);
printf("remquo(%g, %g, &q)=%g\nq = %d",
d1, d2, r, q);
}
Output
Enter two doubles: 16 9
remquo(16, 9, &q)= 7
q = 1

rint

math.h
Prototype
double rint(double x);
float rintf(float x);
long double rintl(long double x);
Description
Rounds x to the nearest integer value, using the current rounding mode. If the return value is not equal to x, the FE_INEXACT exception is raised. The nearbyint functions perform the same operation, but do not set the FE_INEXACT exception.
Return Value
x rounded to an integer value.
Compatibility
ANSI C99 7.12.9.4, DOS, Windows 3.x, Phar Lap, DOSX, Win32
rndtol rndtonl round
Example
/* Example of rint
Also demonstrates rintf
*/

#include <stdlib.h>
#include <stdio.h>
#include <math.h>

void main()
{
double d;

printf("Enter a double: ");
scanf("%lg", &d);
printf("\nrint(%g) = %g\n",
d, rint(d));
}
Output
Enter a double: 3.14

rint(3.14) = 3

rndtol

fltpnt.h
Prototype
long rndtol(double x);
long rndtonl(double x);
Description
Returns x rounded to a long value. If the integer value of x is greater than the maximum value of a long, the result is indeterminate.

The rndtol function uses the current rounding mode. The rndtonl function uses the FE_TONEAREST rounding mode.

Return Value
x rounded to a long.
Compatibility
DOS Windows 3.x Phar Lap DOSX Win32
rint round trunc
Example
/* Example of rndtol */

#include <stdlib.h>
#include <stdio.h>
#include <fltpnt.h>

void main()
{
double d;

printf("Enter a double: ");
scanf("%lg", &d);
printf("\nrndtol(%g)=%ld\n",
d, rndtol(d));
}
/* Example of rndtonl */

#include <stdlib.h>
#include <stdio.h>
#include <fltpnt.h>

void main()
{
double d;
printf("Enter a double: ");
scanf("%lg", &d);
printf("\nrndtonl(%g)=%ld\n",
d, rndtonl(d));
}
Output
Enter a double: 3.14

rndtol(3.14)= 3

Enter a double: 3.14

rndtonl(3.14)= 3

round

fltpnt.h
Prototype
double round(double x);
float roundf(float x);
long double roundl(long double x);
Description
Return the value of x rounded to the nearest integer. If the fractional part of x is exactly 0.5, the return value is rounded to the even integer.
Return Value
x rounded to the nearest integer value.
Compatibility
DOS Windows 3.x Phar Lap DOSX Win32
rint rndtol rndtonl
Example
/* Example of round
Also demonstrates roundf
*/

#include <stdlib.h>
#include <stdio.h>
#include <fltpnt.h>

void main()
{
double d;
printf("Enter a double: ");
scanf("%lg", &d);
printf("\nround(%g)=%g\n",
d, round (d));
}
Output
Enter a double: 3.14

round(3.14)= 3

scalb

fltpnt.h
Prototype
double scalb(double x, long n);
float scalbf(float x, long n);
long double scalbl(long double x, long n);
Description
Calculates x * FLT_RADIXn efficiently, without calculating FLT_RADIX n explicitly. scalb handles underflow and overflow in the same fashion as the basic arithmetic operators.
Return Value
The value of x * FLT_RADIXn .

Special Results

x return value
±INFINITY ±INFINITY
±0.0 ±0.0
Compatibility
DOS Windows 3.x Phar Lap DOSX Win32
Example
/* Example of scalb
Also demonstrates scalbf
*/

#include <stdlib.h>
#include <stdio.h>
#include <fltpnt.h>
#include <float.h>

void main()
{
double d;
long l;

printf("Enter a double and an int: ");
scanf("%lg %ld", &d, &l);
printf("\n%g * %d^%ld=%g\n",
d, FLT_RADIX, l, scalb(d, l));
}
Output
Enter a double and an int: 10 6

10 * 2^6= 640

trunc

fltpnt.h
Prototype
double trunc(double x);
float truncf(float x);
long double truncl(long double x);
Description
Returns the integer portion of x, dropping the fractional portion. This is also know as "chop" rounding.
Return Value
x without its fractional part.
Compatibility
DOS Windows 3.x Phar Lap DOSX Win32
ceil floor rint rndtol rndtonl round
Example
/* Example of trunc
Also demonstrates truncl, truncf
*/

#include <stdlib.h>
#include <stdio.h>
#include <fltpnt.h>

void main()
{
double d;

printf("Enter a double: ");
scanf("%lg", &d);
printf("\ntrunc(%g)=%g\n",
d, trunc (d));
}
Output
Enter a double: 3.14

trunc(3.14)= 3