FMOD |
Modulo avec virgule flottante |
---|---|
Langage C++ | cmath (math.h) |
Syntaxe
float fmod(float a, float b); |
double fmod(double a,double b); |
long double fmod(long double a, long double b); |
Paramètres
Nom | Description |
---|---|
a | Ce paramètre permet d'indiquer le nombre à diviser |
b | Ce paramètre permet d'indiquer le diviseur |
Description
Cette fonction retourne le reste d'une division de a par b.
Remarques
- La fonction fmod() renvoie le reste de a/b.
- Définition et utilité : La fonction fmod en C++ calcule le reste de la division de deux nombres à virgule flottante. Elle est définie dans la bibliothèque <cmath> et permet de réaliser une opération de division avec le comportement de modulo, mais pour des nombres à virgule flottante. Elle est particulièrement utile dans les calculs où un reste est nécessaire, tout en conservant la précision des nombres flottants.
- Comportement avec les nombres négatifs : La fonction fmod garde le signe du dividende (le premier paramètre), ce qui peut être surprenant par
rapport à l'opérateur % utilisé avec les entiers. Par exemple :
- fmod(5.3, 2.0) renverra 1.3 (car 5.3 divisé par 2 donne un quotient de 2 et un reste de 1.3).
- fmod(-5.3, 2.0) renverra -1.3 (ici, le reste conserve le signe négatif du dividende). Cette gestion du signe fait que le résultat de fmod est plus cohérent avec le comportement mathématique attendu dans certains algorithmes.
- Pas de division par zéro : Si le diviseur y est égal à zéro, fmod renvoie une valeur indéfinie. Cela entraîne généralement un comportement de programme non défini et doit être évité. Il est important de toujours vérifier que le diviseur n'est pas zéro avant d'appeler fmod pour éviter des erreurs de calcul.
- Comportement avec zéros et petits nombres : Si x est un multiple exact de y, le résultat de fmod sera zéro. Par exemple, fmod(6.0, 3.0) renverra 0.0, car 6 divisé par 3 donne un quotient exact et aucun reste. De même, si x est plus petit que y, le résultat sera simplement égal à x (tant que x n'est pas égal à zéro), par exemple, fmod(2.0, 3.0) renverra 2.0.
- Comparaison avec l'opérateur % pour les Entiers L'opérateur modulo % fonctionne uniquement avec des entiers, et le comportement pour les nombres à virgule flottante est différent. fmod permet de calculer un reste pour des divisions impliquant des nombres décimaux, ce qui est crucial dans des applications telles que les calculs trigonométriques, les ajustements d'angles ou les opérations financières où des valeurs non entières sont courantes.
- Utilisation dans les calculs trigonométriques : fmod est souvent utilisée dans les calculs trigonométriques où les résultats doivent être limités à un certain intervalle. Par exemple, pour limiter un angle à la plage de 0 à 2π (en radians), on peut utiliser fmod(angle, 2 * M_PI) pour obtenir l'angle dans l'intervalle voulu. Cela évite que les valeurs d'angle deviennent trop grandes ou trop petites, ce qui peut poser problème dans des calculs trigonométriques.
- Comportement avec les types float et long double Bien que fmod soit définie pour les types double, elle peut également être utilisée avec des types float et long double. La version appropriée est choisie en fonction du type des arguments. Il est important de se rappeler que les types flottants ont des précisions différentes, et donc les résultats de fmod peuvent varier légèrement en fonction du type utilisé. En général, il est recommandé d'utiliser double pour une précision maximale.
Exemple
Voici quelques exemples typiques de l'utilisation de cette fonction :

- #include <iostream>
- #include <cmath>
-
- int main()
- {
- std::cout << "fmod(-81,9) = " << fmod(-81,9) << std::endl;
- std::cout << "fmod(15,3) = " << fmod(15,3) << std::endl;
- std::cout << "fmod(16,3) = " << fmod(16,3) << std::endl;
- std::cout << "fmod(17,3) = " << fmod(17,3) << std::endl;
- std::cout << "fmod(18,3) = " << fmod(18,3) << std::endl;
- std::cout << "fmod(19,3) = " << fmod(19,3) << std::endl;
- std::cout << "fmod(0,1) = " << fmod(0,1) << std::endl;
- return 0;
- }
on obtiendra le résultat suivant :
fmod(-81,9) = -0fmod(15,3) = 0
fmod(16,3) = 1
fmod(17,3) = 2
fmod(18,3) = 0
fmod(19,3) = 1
fmod(0,1) = 0
Voir également
Langage de programmation - C++ - Référence de procédures et fonctions - div
Langage de programmation - C - Référence de procédures et fonctions - fmod
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 731.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 104.
Dernière mise à jour : Lundi, le 3 août 2015