Namensräume
Varianten
Aktionen

rint, rintf, rintl, lrint, lrintf, lrintl, llrint, llrintf, llrintl

Von cppreference.com
< c‎ | numerik‎ | math
 
 
 
Allgemeine mathematische Funktionen
Funktionen
Grundlegende Operationen
(C99)
(C99)
(C99)
(C99)(C99)(C99)(C23)
Maximum/Minimum-Operationen
(C99)
(C99)
Exponentialfunktionen
(C23)
(C99)
(C99)
(C23)
(C23)

(C99)
(C99)(C23)
(C23)
(C23)
Potenzfunktionen
(C99)
(C23)
(C23)

(C99)
(C23)
(C23)
Trigonometrische und hyperbolische Funktionen
(C23)
(C23)
(C23)
(C23)
(C99)
(C99)
(C99)
Nächste ganze Gleitkommazahlen
(C99)(C99)(C99)
(C99)

rintlrintllrint
(C99)(C99)(C99)
(C23)(C23)(C23)(C23)
Gleitkomma-Manipulation
(C99)(C99)
(C99)(C23)
(C99)
Verengende Operationen
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
Quanten- und Quantenexponent-Funktionen
Dezimal-Neu-Kodierungsfunktionen
Gesamtordnung und Payload-Funktionen
Klassifizierung
(C99)
(C99)
(C99)
(C23)
Fehler- und Gammafunktionen
(C99)
(C99)
(C99)
(C99)
Typen
Makrokonstanten
Spezielle Gleitkommawerte
(C99)(C23)
Argumente und Rückgabewerte
Fehlerbehandlung
Schnelle Operationsanzeigen
 
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)
1-3) Rundet das Gleitkommaargument arg gemäß dem aktuellen Rundungsmodus auf einen ganzzahligen Wert im Gleitkommaformat.
5-7, 9-11) Rundet das Gleitkommaargument arg gemäß dem aktuellen Rundungsmodus auf einen ganzzahligen Wert im Ganzzahlformat.
4,8,12) Typerdefinierende Makros: Wenn arg den Typ long double hat, wird 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 lrint und llrint
  • 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...

[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) [bearbeiten]
rundet auf eine ganze Zahl gemäß der aktuellen Rundungsregel
(Funktion) [bearbeiten]
holt oder setzt die Rundungsrichtung
(function) [edit]