Standards / Extensions | C or C++ | Dependencies |
---|---|---|
C99 |
both | z/OS V1R7 |
#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);
#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);
Function | Hex | IEEE |
---|---|---|
lrint | X | X |
lrintf | X | X |
lrintl | X | X |
llrint | X | X |
llrintf | X | X |
llrintl | X | X |
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.
/*
* 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