rint, rintf, rintl, lrint, lrintf, lrintl, llrint, llrintf, llrintl
| Definiert in Header <math.h> |
||
| float rintf( float arg ); |
(1) | (seit C99) |
| double rint( double arg ); |
(2) | (seit C99) |
| long double rintl( long double arg ); |
(3) | (seit C99) |
| Definiert in Header <tgmath.h> |
||
| #define rint( arg ) |
(4) | (seit C99) |
| Definiert in Header <math.h> |
||
| long lrintf( float arg ); |
(5) | (seit C99) |
| long lrint( double arg ); |
(6) | (seit C99) |
| long lrintl( long double arg ); |
(7) | (seit C99) |
| Definiert in Header <tgmath.h> |
||
| #define lrint( arg ) |
(8) | (seit C99) |
| Definiert in Header <math.h> |
||
| long long llrintf( float arg ); |
(9) | (seit C99) |
| long long llrint( double arg ); |
(10) | (seit C99) |
| long long llrintl( long double arg ); |
(11) | (seit C99) |
| Definiert in Header <tgmath.h> |
||
| #define llrint( arg ) |
(12) | (seit C99) |
rintl, lrintl, llrintl aufgerufen. Andernfalls, wenn arg einen ganzzahligen Typ oder den Typ double hat, werden rint, lrint, llrint aufgerufen. Andernfalls werden rintf, lrintf, llrintf aufgerufen.Inhalt |
[bearbeiten] Parameter
| arg | - | Gleitkommawert |
[bearbeiten] Rückgabewert
Wenn keine Fehler auftreten, wird der ganzzahlige Wert, der dem Argument arg am nächsten liegt, gemäß dem aktuellen Rundungsmodus zurückgegeben.
[bearbeiten] Fehlerbehandlung
Fehler werden wie in math_errhandling angegeben gemeldet.
Wenn das Ergebnis von lrint oder llrint außerhalb des durch den Rückgabetyp darstellbaren Bereichs liegt, kann ein Domänenfehler oder ein Bereichsfehler auftreten.
Wenn die Implementierung IEEE-Gleitkomma-Arithmetik (IEC 60559) unterstützt,
- Für die Funktion
rint
- Wenn arg ±∞ ist, wird es unverändert zurückgegeben.
- Wenn arg ±0 ist, wird es unverändert zurückgegeben.
- Wenn arg NaN ist, wird NaN zurückgegeben.
- Für die Funktionen
lrintundllrint
- Wenn arg ±∞ ist, wird FE_INVALID ausgelöst und ein implementierungsabhängiger Wert zurückgegeben.
- Wenn das Ergebnis der Rundung außerhalb des Bereichs des Rückgabetyps liegt, wird FE_INVALID ausgelöst und ein implementierungsabhängiger Wert zurückgegeben.
- Wenn arg NaN ist, wird FE_INVALID ausgelöst und ein implementierungsabhängiger Wert zurückgegeben.
[bearbeiten] Hinweise
POSIX spezifiziert, dass alle Fälle, in denen lrint oder llrint FE_INEXACT auslösen, Domänenfehler sind.
Wie in math_errhandling angegeben, kann FE_INEXACT (auf nicht-IEEE-Gleitkomma-Plattformen aber nicht zwingend) von rint ausgelöst werden, wenn eine endliche Nicht-Ganzzahl gerundet wird.
Der einzige Unterschied zwischen rint und nearbyint besteht darin, dass nearbyint niemals FE_INEXACT auslöst.
Die größten darstellbaren Gleitkommawerte sind in allen Standard-Gleitkommaformaten exakte ganze Zahlen, daher führt rint an sich nie zu einem Überlauf; das Ergebnis kann jedoch jeden ganzzahligen Typ (einschließlich intmax_t) überschreiten, wenn es in einer Ganzzahlvariable gespeichert wird.
Wenn der aktuelle Rundungsmodus...
- FE_DOWNWARD ist, dann ist
rintäquivalent zu floor. - FE_UPWARD ist, dann ist
rintäquivalent zu ceil. - FE_TOWARDZERO ist, dann ist
rintäquivalent zu trunc. - FE_TONEAREST ist, dann unterscheidet sich
rintvon round darin, dass Halb-Fälle zum nächsten geraden Wert gerundet werden und nicht vom Nullpunkt weg.
[bearbeiten] Beispiel
#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"); }
Mögliche Ausgabe
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[bearbeiten] Referenzen
- C23-Standard (ISO/IEC 9899:2024)
- 7.12.9.4 The rint functions (p: TBD)
- 7.12.9.5 The lrint and llrint functions (p: TBD)
- 7.25 Typ-generische Mathematik <tgmath.h> (S. TBD)
- F.10.6.4 The rint functions (p: TBD)
- F.10.6.5 The lrint and llrint functions (p: TBD)
- C17-Standard (ISO/IEC 9899:2018)
- 7.12.9.4 The rint functions (p: 184)
- 7.12.9.5 The lrint and llrint functions (p: 184)
- 7.25 Typ-generische Mathematik <tgmath.h> (S. 272-273)
- F.10.6.4 The rint functions (p: 384)
- F.10.6.5 The lrint and llrint functions (p: 384)
- C11-Standard (ISO/IEC 9899:2011)
- 7.12.9.4 The rint functions (p: 252)
- 7.12.9.5 The lrint and llrint functions (p: 252)
- 7.25 Typ-generische Mathematik <tgmath.h> (S. 373-375)
- F.10.6.4 The rint functions (p: 527)
- F.10.6.5 The lrint and llrint functions (p: 527)
- C99-Standard (ISO/IEC 9899:1999)
- 7.12.9.4 The rint functions (p: 232-233)
- 7.12.9.5 The lrint and llrint functions (p: 233)
- 7.22 Typ-generische Mathematik <tgmath.h> (S. 335-337)
- F.9.6.4 The rint functions (p: 463)
- F.9.6.5 The lrint and llrint functions (p: 463)
[bearbeiten] Siehe auch
| (C99)(C99)(C99) |
rundet auf die größte ganze Zahl, deren Betrag nicht größer als der gegebene Wert ist (Funktion) |
| (C99)(C99)(C99) |
rundet auf eine ganze Zahl gemäß der aktuellen Rundungsregel (Funktion) |
| (C99)(C99) |
holt oder setzt die Rundungsrichtung (function) |
| C++ Dokumentation für rint
| |