fmod, fmodf, fmodl
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Défini dans l'en-tête
<math.h>
|
||
|
float
fmodf
(
float
x,
float
y
)
;
|
(1) | (depuis C99) |
|
double
fmod
(
double
x,
double
y
)
;
|
(2) | |
|
long
double
fmodl
(
long
double
x,
long
double
y
)
;
|
(3) | (depuis C99) |
|
Défini dans l'en-tête
<tgmath.h>
|
||
|
#define fmod( x, y )
|
(4) | (depuis C99) |
fmodl
est appelé. Sinon, si un argument a un type entier ou a le type
double
,
fmod
est appelé. Sinon,
fmodf
est appelé.
Le reste en virgule flottante de l'opération de division
x
/
y
calculé par cette fonction est exactement la valeur
x
-
n
*
y
, où
n
est
x
/
y
avec sa partie fractionnaire tronquée.
La valeur retournée a le même signe que x et est inférieure ou égale à y en magnitude.
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 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 (après arrondi) 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) :
- Si x est ±0 et y n'est pas zéro, ±0 est retourné.
- Si x est ±∞ et y n'est pas NaN, NaN est retourné et FE_INVALID est déclenché.
- Si y est ±0 et x n'est pas NaN, NaN est retourné et FE_INVALID est déclenché.
- Si y est ±∞ et x est fini, x est retourné.
- Si l'un des arguments est NaN, NaN est retourné.
Notes
POSIX requiert 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 enroulement 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
]
, qui est en dehors de l'intervalle de
signed
short
.
La version
double
de
fmod
se comporte comme si elle était implémentée comme suit :
Exemple
#include <fenv.h> #include <math.h> #include <stdio.h> // #pragma STDC FENV_ACCESS ON int main(void) { printf("fmod(+5.1, +3.0) = %.1f\n", fmod(5.1, 3)); printf("fmod(-5.1, +3.0) = %.1f\n", fmod(-5.1, 3)); printf("fmod(+5.1, -3.0) = %.1f\n", fmod(5.1, -3)); printf("fmod(-5.1, -3.0) = %.1f\n", fmod(-5.1, -3)); // special values printf("fmod(+0.0, 1.0) = %.1f\n", fmod(0, 1)); printf("fmod(-0.0, 1.0) = %.1f\n", fmod(-0.0, 1)); printf("fmod(+5.1, Inf) = %.1f\n", fmod(5.1, INFINITY)); // error handling feclearexcept(FE_ALL_EXCEPT); printf("fmod(+5.1, 0) = %.1f\n", fmod(5.1, 0)); if (fetestexcept(FE_INVALID)) puts(" FE_INVALID raised"); }
Sortie possible :
fmod(+5.1, +3.0) = 2.1
fmod(-5.1, +3.0) = -2.1
fmod(+5.1, -3.0) = 2.1
fmod(-5.1, -3.0) = -2.1
fmod(+0.0, 1.0) = 0.0
fmod(-0.0, 1.0) = -0.0
fmod(+5.1, Inf) = 5.1
fmod(+5.1, 0) = nan
FE_INVALID raised
Références
- Norme C23 (ISO/CEI 9899:2024) :
-
- 7.12.10.1 Les fonctions fmod (p: TBD)
-
- 7.25 Mathématiques génériques de type <tgmath.h> (p: TBD)
-
- F.10.7.1 Les fonctions fmod (p: TBD)
- Norme C17 (ISO/CEI 9899:2018) :
-
- 7.12.10.1 Les fonctions fmod (p: 185)
-
- 7.25 Mathématiques génériques de type <tgmath.h> (p: 274-275)
-
- F.10.7.1 Les fonctions fmod (p: 385)
- Norme C11 (ISO/CEI 9899:2011) :
-
- 7.12.10.1 Les fonctions fmod (p: 254)
-
- 7.25 Mathématiques génériques de type <tgmath.h> (p: 373-375)
-
- F.10.7.1 Les fonctions fmod (p: 528)
- Norme C99 (ISO/CEI 9899:1999) :
-
- 7.12.10.1 Les fonctions fmod (p: 235)
-
- 7.22 Mathématiques génériques de type <tgmath.h> (p: 335-337)
-
- F.9.7.1 Les fonctions fmod (p: 465)
- Norme C89/C90 (ISO/IEC 9899:1990) :
-
- 4.5.6.4 La fonction fmod
Voir aussi
|
(C99)
|
calcule le quotient et le reste d'une division entière
(fonction) |
|
(C99)
(C99)
(C99)
|
calcule le reste signé 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
fmod
|
|