rint, rintf, rintl, lrint, lrintf, lrintl, llrint, llrintf, llrintl
|
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) |
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
lrintetllrint:
- 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...
-
FE_DOWNWARD
, alors
rintest équivalent à floor . -
FE_UPWARD
, alors
rintest équivalent à ceil . -
FE_TOWARDZERO
, alors
rintest équivalent à trunc -
FE_TONEAREST
, alors
rintdiffère de round en ce que les cas à mi-chemin sont arrondis vers le pair plutôt que vers zéro.
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) |
|
(C99)
(C99)
(C99)
|
arrondit à un entier en utilisant le mode d'arrondi actuel
(fonction) |
|
(C99)
(C99)
|
obtient ou définit la direction d'arrondi
(fonction) |
|
Documentation C++
pour
rint
|
|