Namespaces
Variants

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

From cppreference.net
< c ‎ | numeric ‎ | math
Common mathematical functions
Functions
Basic operations
(C99)
(C99)
(C99)
(C99) (C99) (C99) (C23)
Maximum/minimum operations
Exponential functions
Power functions
Trigonometric and hyperbolic functions
Nearest integer floating-point
rint lrint llrint
(C99) (C99) (C99)
(C23) (C23) (C23) (C23)
Floating-point manipulation
Narrowing operations
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
Quantum and quantum exponent
Decimal re-encoding functions
Total order and payload functions
Classification
Error and gamma functions
(C99)
(C99)
(C99)
(C99)
Types
Macro constants
Special floating-point values
Arguments and return values
Error handling
Fast operation indicators
Défini dans l'en-tête <math.h>
float rintf ( float arg ) ;
(1) (depuis C99)
double rint ( double arg ) ;
(2) (depuis C99)
long double rintl ( long double arg ) ;
(3) (depuis C99)
Défini dans l'en-tête <tgmath.h>
#define rint( arg )
(4) (depuis C99)
Défini dans l'en-tête <math.h>
long lrintf ( float arg ) ;
(5) (depuis C99)
long lrint ( double arg ) ;
(6) (depuis C99)
long lrintl ( long double arg ) ;
(7) (depuis C99)
Défini dans l'en-tête <tgmath.h>
#define lrint( arg )
(8) (depuis C99)
Défini dans l'en-tête <math.h>
long long llrintf ( float arg ) ;
(9) (depuis C99)
long long llrint ( double arg ) ;
(10) (depuis C99)
long long llrintl ( long double arg ) ;
(11) (depuis C99)
Défini dans l'en-tête <tgmath.h>
#define llrint( arg )
(12) (depuis C99)
1-3) Arrondit l'argument à virgule flottante arg à une valeur entière au format à virgule flottante, en utilisant le mode d'arrondi actuel.
5-7, 9-11) Arrondit l'argument à virgule flottante arg à une valeur entière dans un format entier, en utilisant le mode d'arrondi actuel.
4,8,12) Macros génériques de type : Si arg a le type long double , rintl , lrintl , llrintl sont appelés. Sinon, si arg a un type entier ou le type double , rint , lrint , llrint sont appelés. Sinon, rintf , lrintf , llrintf sont appelés, respectivement.

Table des matières

Paramètres

arg - valeur en virgule flottante

Valeur de retour

Si aucune erreur ne se produit, la valeur entière la plus proche de arg , selon le mode d'arrondi actuel , est retournée.

Gestion des erreurs

Les erreurs sont signalées comme spécifié dans math_errhandling .

Si le résultat de lrint ou llrint est en dehors de la plage représentable par le type de retour, une erreur de domaine ou une erreur de plage peut survenir.

Si l'implémentation prend en charge l'arithmétique à virgule flottante IEEE (IEC 60559),

Pour la fonction rint :
  • Si arg est ±∞, il est retourné, non modifié.
  • Si arg est ±0, il est retourné, non modifié.
  • Si arg est NaN, NaN est retourné.
Pour les fonctions lrint et llrint :
  • Si arg est ±∞, FE_INVALID est déclenchée et une valeur définie par l'implémentation est retournée.
  • Si le résultat de l'arrondi dépasse la plage du type de retour, FE_INVALID est déclenchée et une valeur définie par l'implémentation est retournée.
  • Si arg est NaN, FE_INVALID est déclenchée et une valeur définie par l'implémentation est retournée.

Notes

POSIX spécifie que tous les cas où lrint ou llrint lèvent FE_INEXACT sont des erreurs de domaine.

Comme spécifié dans math_errhandling , FE_INEXACT peut être (mais n'est pas obligatoire sur les plateformes à virgule flottante non-IEEE) déclenché par rint lors de l'arrondi d'une valeur finie non entière.

La seule différence entre rint et nearbyint est que nearbyint ne lève jamais FE_INEXACT .

Les plus grandes valeurs représentables en virgule flottante sont des entiers exacts dans tous les formats standard de virgule flottante, donc rint ne provoque jamais de dépassement de capacité par lui-même ; cependant le résultat peut dépasser la capacité de tout type entier (y compris intmax_t ), lorsqu'il est stocké dans une variable entière.

Si le mode d'arrondi actuel est...

Exemple

#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");
}

Sortie possible :

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

Références

  • Norme C23 (ISO/CEI 9899:2024) :
  • 7.12.9.4 Les fonctions rint (p: TBD)
  • 7.12.9.5 Les fonctions lrint et llrint (p: TBD)
  • 7.25 Mathématiques génériques de type <tgmath.h> (p: TBD)
  • F.10.6.4 Les fonctions rint (p: TBD)
  • F.10.6.5 Les fonctions lrint et llrint (p: TBD)
  • Norme C17 (ISO/CEI 9899:2018) :
  • 7.12.9.4 Les fonctions rint (p: 184)
  • 7.12.9.5 Les fonctions lrint et llrint (p: 184)
  • 7.25 Mathématiques génériques de type <tgmath.h> (p: 272-273)
  • F.10.6.4 Les fonctions rint (p: 384)
  • F.10.6.5 Les fonctions lrint et llrint (p: 384)
  • Norme C11 (ISO/CEI 9899:2011) :
  • 7.12.9.4 Les fonctions rint (p: 252)
  • 7.12.9.5 Les fonctions lrint et llrint (p: 252)
  • 7.25 Mathématiques génériques <tgmath.h> (p: 373-375)
  • F.10.6.4 Les fonctions rint (p: 527)
  • F.10.6.5 Les fonctions lrint et llrint (p: 527)
  • Norme C99 (ISO/CEI 9899:1999) :
  • 7.12.9.4 Les fonctions rint (p: 232-233)
  • 7.12.9.5 Les fonctions lrint et llrint (p: 233)
  • 7.22 Mathématiques génériques de type <tgmath.h> (p: 335-337)
  • F.9.6.4 Les fonctions rint (p: 463)
  • F.9.6.5 Les fonctions lrint et llrint (p: 463)

Voir aussi

(C99) (C99) (C99)
arrondit à l'entier le plus proche dont la magnitude n'est pas supérieure à la valeur donnée
(fonction)
arrondit à un entier en utilisant le mode d'arrondi actuel
(fonction)
obtient ou définit la direction d'arrondi
(fonction)