|
|
|
Defined in header <math.h> | ||
float rintf(float arg); | (1) | (since C99) |
double rint(double arg); | (2) | (since C99) |
longdouble rintl(longdouble arg); | (3) | (since C99) |
Defined in header <tgmath.h> | ||
#define rint( arg ) | (4) | (since C99) |
Defined in header <math.h> | ||
long lrintf(float arg); | (5) | (since C99) |
long lrint(double arg); | (6) | (since C99) |
long lrintl(longdouble arg); | (7) | (since C99) |
Defined in header <tgmath.h> | ||
#define lrint( arg ) | (8) | (since C99) |
Defined in header <math.h> | ||
longlong llrintf(float arg); | (9) | (since C99) |
longlong llrint(double arg); | (10) | (since C99) |
longlong llrintl(longdouble arg); | (11) | (since C99) |
Defined in header <tgmath.h> | ||
#define llrint( arg ) | (12) | (since C99) |
rintl
,lrintl
,llrintl
is called. Otherwise, ifarg has integer type or the typedouble,rint
,lrint
,llrint
is called. Otherwise,rintf
,lrintf
,llrintf
is called, respectively.Contents |
arg | - | floating-point value |
If no errors occur, the nearest integer value toarg, according to thecurrent rounding mode, is returned.
Errors are reported as specified inmath_errhandling
.
If the result oflrint
orllrint
is outside the range representable by the return type, a domain error or a range error may occur.
If the implementation supports IEEE floating-point arithmetic (IEC 60559),
rint
function:lrint
andllrint
functions:POSIX specifies that all cases wherelrint
orllrint
raiseFE_INEXACT are domain errors.
As specified inmath_errhandling
,FE_INEXACT may be (but isn't required to be on non-IEEE floating-point platforms) raised byrint
when rounding a non-integer finite value.
The only difference betweenrint
andnearbyint is thatnearbyint never raisesFE_INEXACT.
The largest representable floating-point values are exact integers in all standard floating-point formats, sorint
never overflows on its own; however the result may overflow any integer type (includingintmax_t), when stored in an integer variable.
If the current rounding mode is...
rint
is equivalent tofloor.rint
is equivalent toceil.rint
is equivalent totruncrint
differs fromround in that halfway cases are rounded to even rather than away from zero.#include <fenv.h>#include <limits.h>#include <math.h>#include <stdio.h> int main(void){#pragma STDC FENV_ACCESS ONfesetround(FE_TONEAREST);printf("rounding to nearest (halfway cases to even):\n""rint(+2.3) = %+.1f ", rint(2.3));printf("rint(+2.5) = %+.1f ", rint(2.5));printf("rint(+3.5) = %+.1f\n", rint(3.5));printf("rint(-2.3) = %+.1f ", rint(-2.3));printf("rint(-2.5) = %+.1f ", rint(-2.5));printf("rint(-3.5) = %+.1f\n", rint(-3.5)); fesetround(FE_DOWNWARD);printf("rounding down:\nrint(+2.3) = %+.1f ", rint(2.3));printf("rint(+2.5) = %+.1f ", rint(2.5));printf("rint(+3.5) = %+.1f\n", rint(3.5));printf("rint(-2.3) = %+.1f ", rint(-2.3));printf("rint(-2.5) = %+.1f ", rint(-2.5));printf("rint(-3.5) = %+.1f\n", rint(-3.5));printf("rounding down with lrint:\nlrint(+2.3) = %ld ", lrint(2.3));printf("lrint(+2.5) = %ld ", lrint(2.5));printf("lrint(+3.5) = %ld\n", lrint(3.5));printf("lrint(-2.3) = %ld ", lrint(-2.3));printf("lrint(-2.5) = %ld ", lrint(-2.5));printf("lrint(-3.5) = %ld\n", lrint(-3.5)); printf("lrint(-0.0) = %ld\n", lrint(-0.0));printf("lrint(-Inf) = %ld\n", lrint(-INFINITY));// FE_INVALID raised // error handlingfeclearexcept(FE_ALL_EXCEPT);printf("rint(1.1) = %.1f\n", rint(1.1));if(fetestexcept(FE_INEXACT))puts(" FE_INEXACT was raised"); feclearexcept(FE_ALL_EXCEPT);printf("lrint(LONG_MIN-2048.0) = %ld\n", lrint(LONG_MIN-2048.0));if(fetestexcept(FE_INVALID))puts(" FE_INVALID was raised");}
Possible output:
rounding to nearest (halfway cases to even):rint(+2.3) = +2.0 rint(+2.5) = +2.0 rint(+3.5) = +4.0rint(-2.3) = -2.0 rint(-2.5) = -2.0 rint(-3.5) = -4.0rounding down:rint(+2.3) = +2.0 rint(+2.5) = +2.0 rint(+3.5) = +3.0rint(-2.3) = -3.0 rint(-2.5) = -3.0 rint(-3.5) = -4.0rounding down with lrint:lrint(+2.3) = 2 lrint(+2.5) = 2 lrint(+3.5) = 3lrint(-2.3) = -3 lrint(-2.5) = -3 lrint(-3.5) = -4lrint(-0.0) = 0lrint(-Inf) = -9223372036854775808rint(1.1) = 1.0 FE_INEXACT was raisedlrint(LONG_MIN-2048.0) = -9223372036854775808 FE_INVALID was raised
(C99)(C99)(C99) | rounds to nearest integer not greater in magnitude than the given value (function)[edit] |
(C99)(C99)(C99) | rounds to an integer using current rounding mode (function)[edit] |
(C99)(C99) | gets or sets rounding direction (function)[edit] |
C++ documentation forrint |