float rintf( float arg );
(1) (since C99)double rint( double arg );
(2) (since C99)long double rintl( long double arg );
(3) (since C99)#define rint( arg )
(4) (since C99)long lrintf( float arg );
(5) (since C99)long lrint( double arg );
(6) (since C99)long lrintl( long double arg );
(7) (since C99)#define lrint( arg )
(8) (since C99)long long llrintf( float arg );
(9) (since C99)long long llrint( double arg );
(10) (since C99)long long llrintl( long double arg );
(11) (since C99)#define llrint( arg )
(12) (since C99)1-3) Rounds the floating-point argument arg to an integer value in floating-point format, using the current rounding mode.
5-7, 9-11) Rounds the floating-point argument arg to an integer value in integer format, using the current rounding mode.
4,8,12) Type-generic macros: If arg has type long double, rintl
, lrintl
, llrintl
is called. Otherwise, if arg has integer type or the type double, rint
, lrint
, llrint
is called. Otherwise, rintf
, lrintf
, llrintf
is called, respectively.
If no errors occur, the nearest integer value to arg, according to the current rounding mode, is returned.
[edit] Error handlingErrors are reported as specified in math_errhandling
.
If the result of lrint
or llrint
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
and llrint
functions:
POSIX specifies that all cases where lrint
or llrint
raise FE_INEXACT are domain errors.
As specified in math_errhandling
, FE_INEXACT may be (but isn't required to be on non-IEEE floating-point platforms) raised by rint
when rounding a non-integer finite value.
The only difference between rint
and nearbyint is that nearbyint never raises FE_INEXACT.
The largest representable floating-point values are exact integers in all standard floating-point formats, so rint
never overflows on its own; however the result may overflow any integer type (including intmax_t), when stored in an integer variable.
If the current rounding mode is...
rint
is equivalent to floor.rint
is equivalent to ceil.rint
is equivalent to truncrint
differs from round 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 ON fesetround(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 handling feclearexcept(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.0 rint(-2.3) = -2.0 rint(-2.5) = -2.0 rint(-3.5) = -4.0 rounding down: rint(+2.3) = +2.0 rint(+2.5) = +2.0 rint(+3.5) = +3.0 rint(-2.3) = -3.0 rint(-2.5) = -3.0 rint(-3.5) = -4.0 rounding down with lrint: lrint(+2.3) = 2 lrint(+2.5) = 2 lrint(+3.5) = 3 lrint(-2.3) = -3 lrint(-2.5) = -3 lrint(-3.5) = -4 lrint(-0.0) = 0 lrint(-Inf) = -9223372036854775808 rint(1.1) = 1.0 FE_INEXACT was raised lrint(LONG_MIN-2048.0) = -9223372036854775808 FE_INVALID was raised[edit] References
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4