remainder, remainderf, remainderl
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Défini dans l'en-tête
<math.h>
|
||
|
float
remainderf
(
float
x,
float
y
)
;
|
(1) | (depuis C99) |
|
double
remainder
(
double
x,
double
y
)
;
|
(2) | (depuis C99) |
|
long
double
remainderl
(
long
double
x,
long
double
y
)
;
|
(3) | (depuis C99) |
|
Défini dans l'en-tête
<tgmath.h>
|
||
|
#define remainder( x, y )
|
(4) | (depuis C99) |
remainderl
est appelé. Sinon, si un argument a un type entier ou le type
double
,
remainder
est appelé. Sinon,
remainderf
est appelé.
Le reste en virgule flottante IEEE de l'opération de division
x
/
y
calculé par cette fonction est exactement la valeur
x
-
n
*
y
, où la valeur
n
est la valeur entière la plus proche de la valeur exacte
x
/
y
. Lorsque
|n-x/y| = ½
, la valeur
n
est choisie paire.
Contrairement à fmod() , la valeur retournée n'est pas garantie d'avoir le même signe que x .
Si la valeur retournée est 0 , elle aura le même signe que x .
Table des matières |
Paramètres
| x, y | - | valeurs à virgule flottante |
Valeur de retour
En cas de succès, retourne le reste en virgule flottante IEEE de la division x / y tel que défini ci-dessus.
Si une erreur de domaine se produit, une valeur définie par l'implémentation est retournée (NaN là où supporté).
Si une erreur de plage se produit en raison d'un dépassement inférieur, le résultat correct est retourné.
Si y est nul, mais que l'erreur de domaine ne se produit pas, zéro est retourné.
Gestion des erreurs
Les erreurs sont signalées comme spécifié dans
math_errhandling
.
Une erreur de domaine peut survenir si y est nul.
Si l'implémentation prend en charge l'arithmétique à virgule flottante IEEE (IEC 60559),
- Le mode d'arrondi actuel n'a aucun effet.
- FE_INEXACT n'est jamais déclenchée, le résultat est toujours exact.
- Si x est ±∞ et y n'est pas NaN, NaN est retourné et FE_INVALID est déclenchée.
- Si y est ±0 et x n'est pas NaN, NaN est retourné et FE_INVALID est déclenchée.
- Si l'un des arguments est NaN, NaN est retourné.
Notes
POSIX exige qu'une erreur de domaine se produise si x est infini ou y est zéro.
fmod
, mais pas
remainder
, est utile pour effectuer un enveloppement silencieux des types à virgule flottante vers les types entiers non signés :
(
0.0
<=
(
y
=
fmod
(
rint
(
x
)
,
65536.0
)
)
?
y
:
65536.0
+
y
)
est dans l'intervalle
[
-
0.0
,
65535.0
]
, ce qui correspond à
unsigned
short
, mais
remainder
(
rint
(
x
)
,
65536.0
)
est dans l'intervalle
[
-
32767.0
,
+
32768.0
]
, ce qui est en dehors de l'intervalle de
signed
short
.
Exemple
#include <fenv.h> #include <math.h> #include <stdio.h> // #pragma STDC FENV_ACCESS ON int main(void) { printf("remainder(+5.1, +3.0) = %.1f\n", remainder(5.1, 3)); printf("remainder(-5.1, +3.0) = %.1f\n", remainder(-5.1, 3)); printf("remainder(+5.1, -3.0) = %.1f\n", remainder(5.1, -3)); printf("remainder(-5.1, -3.0) = %.1f\n", remainder(-5.1, -3)); // valeurs spéciales printf("remainder(-0.0, 1.0) = %.1f\n", remainder(-0.0, 1)); printf("remainder(+5.1, Inf) = %.1f\n", remainder(5.1, INFINITY)); // gestion des erreurs feclearexcept(FE_ALL_EXCEPT); printf("remainder(+5.1, 0) = %.1f\n", remainder(5.1, 0)); if (fetestexcept(FE_INVALID)) puts(" FE_INVALID raised"); }
Sortie :
remainder(+5.1, +3.0) = -0.9
remainder(-5.1, +3.0) = 0.9
remainder(+5.1, -3.0) = -0.9
remainder(-5.1, -3.0) = 0.9
remainder(+0.0, 1.0) = 0.0
remainder(-0.0, 1.0) = -0.0
remainder(+5.1, Inf) = 5.1
remainder(+5.1, 0) = -nan
FE_INVALID raised
Références
- Norme C23 (ISO/CEI 9899:2024) :
-
- 7.12.10.2 Les fonctions reste (p: TBD)
-
- 7.25 Mathématiques génériques de type <tgmath.h> (p: TBD)
-
- F.10.7.2 Les fonctions reste (p: TBD)
- Norme C17 (ISO/CEI 9899:2018) :
-
- 7.12.10.2 Les fonctions reste (p: 185-186)
-
- 7.25 Mathématiques génériques de type <tgmath.h> (p: 272-273)
-
- F.10.7.2 Les fonctions reste (p: 385)
- Norme C11 (ISO/CEI 9899:2011) :
-
- 7.12.10.2 Les fonctions reste (p: 254-255)
-
- 7.25 Mathématiques génériques de type <tgmath.h> (p: 373-375)
-
- F.10.7.2 Les fonctions reste (p: 529)
- Norme C99 (ISO/CEI 9899:1999) :
-
- 7.12.10.2 Les fonctions remainder (p: 235)
-
- 7.22 Mathématiques génériques de type <tgmath.h> (p: 335-337)
-
- F.9.7.2 Les fonctions remainder (p: 465)
Voir aussi
|
(C99)
|
calcule le quotient et le reste d'une division entière
(fonction) |
|
(C99)
(C99)
|
calcule le reste de l'opération de division en virgule flottante
(fonction) |
|
(C99)
(C99)
(C99)
|
calcule le reste signé ainsi que les trois derniers bits de l'opération de division
(fonction) |
|
Documentation C++
pour
remainder
|
|