lrint(), lrintf(), lrintl() and llrint(), llrintf(), llrintl() — Round the argument to the nearest integer
Standards
Standards / Extensions | C or C++ | Dependencies |
---|---|---|
C99 |
both | z/OS V1R7 |
Format
#define _ISOC99_SOURCE
#include <math.h>
long int lrint(double x);
long int lrintf(float x);
long int lrintl(long double x);
long long int llrint(double x);
long long int llrintf(float x);
long long int llrintl(long double x);
C++
TR1 C99:
#define _TR1_C99
#include <math.h>
long int lrint(float x);
long int lrint(long double x);
long long int llrint(float x);
long long int llrint(long double x);
Compile requirement: The llrint() family of
functions requires the long long data type. See z/OS XL C/C++ Language Reference for
information on how to make long long available.
General description
The lrint() and llrint()
families of functions round their argument to the nearest integer
value according to the current rounding mode. If the rounded value
is outside the range of the return type, the numeric result is unspecified.
A range error may occur if the magnitude of x is
too large.
Note: The following table shows the viable formats for
these functions. See IEEE binary floating-point for
more information about IEEE Binary Floating-Point.
Function | Hex | IEEE |
---|---|---|
lrint | X | X |
lrintf | X | X |
lrintl | X | X |
llrint | X | X |
llrintf | X | X |
llrintl | X | X |
Returned value
If successful, they return the rounded integer value. If the correct value is positive or negative and too large to represent as a long (lrint() family) or long long (llrint() family), a domain error will occur and an unspecified value is returned.
Example
/*
* This program illustrates the use of lrint() function
*
* Note: To get the output shown in this information, this program
* should be compiled using FLOAT(IEEE)
*
*/
#define _ISOC99_SOURCE
#include <math.h>
#include <stdio.h>
#include <_Ieee754.h> /* save/get fpc functions */
char *RoundStr (_FP_rmode_t rm_type) {
char *RndStr="undetermined";
switch (rm_type) {
case (_RMODE_RN):
RndStr="round to nearest";
break;
case (_RMODE_RZ):
RndStr="round toward zero";
break;
case (_RMODE_RP):
RndStr="round toward +infinity ";
break;
case (_RMODE_RM):
RndStr="round toward -infinity ";
break;
}
return (RndStr);
}
void main() {
_FP_fpcreg_t save_rmode, current_rmode;
long int rnd2nearest;
double number=500.99;
printf("Illustrates the lrint() function\n");
__fpc_rd(¤t_rmode); /* get current rounding mode */
rnd2nearest = lrint(number);
printf ("When rounding direction is %s:\n lrint(%.2f) = %li\n",
RoundStr(current_rmode.rmode), number, rnd2nearest);
save_rmode.rmode = _RMODE_RZ;
__fpc_sm(save_rmode.rmode); /* set rounding mode to round to zero */
rnd2nearest = lrint(number);
printf ("When rounding direction is %s:\n lrint(%.2f) = %li\n",
RoundStr(save_rmode.rmode), number, rnd2nearest);
}
Output
Illustrates the lrint() function
When rounding direction is round to nearest:
lrint(500.99) = 501
When rounding direction is round toward zero:
lrint(500.99) = 500
Related information
- math.h
- ceil(), ceilf(), ceill() — Round up to integral value
- floor(), floorf(), floorl() — Round down to integral value
- llround(), llroundf(), llroundl() — Round to the nearest integer
- lround(), lroundf(), lroundl() — Round a decimal floating-point number to its nearest integer
- nearbyint(), nearbyintf(), nearbyintl() — Round the argument to the nearest integer
- rint(), rintf(), rintl() — Round to nearest integral value
- round(), roundf(), roundl() — Round to the nearest integer
- trunc(), truncf(), truncl() — Truncate an integer value