MODF |
Modulo à virgule |
---|---|
Langage C++ | cmath (math.h) |
Syntaxe
float modf(float x, float *entier); |
double modf(double x,double *entier) |
long double modf(long double x, long double *entier); |
Paramètres
Nom | Description |
---|---|
x | Ce paramètre permet d'indiquer l'expression contenant le nombre à traiter |
entier | Ce paramètre permet d'indiquer la variable recevant la partie entière |
Description
Cette fonction transforme un nombre réel en partie entière et en décimal (fraction).
Remarques
- La fonction modf() décompose x en ses parties entières et fractionnaires. Elle renvoie la partie fractionnaire et place la partie entière dans la variable pointée par entier.
- Définition et utilité : La fonction modf est définie dans la bibliothèque <cmath> et permet de séparer une valeur à virgule flottante en deux parties : la partie entière et la partie fractionnaire. Elle est particulièrement utile lorsque vous avez besoin de traiter indépendamment ces deux composantes d'un nombre à virgule flottante pour effectuer des calculs ou des analyses.
- Partie entière et partie fractionnaire : La fonction modf décompose un nombre en sa partie entière et sa partie fractionnaire. Par exemple, pour un nombre x = 3.14159, la fonction renverra 0.14159 (partie fractionnaire) et stockera 3.0 (partie entière) dans le paramètre entier. Cela permet d'obtenir directement les deux parties d'un nombre à virgule flottante de manière séparée.
- Manipulation de nombres négatifs : modf fonctionne correctement avec des nombres négatifs. Si x est un nombre négatif, la partie entière retournée sera également négative, tandis que la partie fractionnaire sera positive. Par exemple, si x = -3.14, la fonction renverra -0.14 et stockera -3.0 dans entier. Il est donc important de prendre en compte le signe lors de l'utilisation des résultats.
- Précision et valeurs flottantes : La fonction modf opère sur des nombres de type double (en C++). Cela signifie que la précision de la partie fractionnaire dépend de la précision de la représentation flottante de double. Comme pour d'autres fonctions mathématiques sur des types flottants, des erreurs d'arrondi peuvent se produire, surtout lorsque l'on travaille avec des valeurs très petites ou très grandes.
- Retour de la partie fractionnaire : La valeur retournée par modf est la partie fractionnaire du nombre. Ce retour peut être utilisé immédiatement dans des calculs, ou pour un stockage séparé. Par exemple, modf(3.14159, &entier) renverra 0.14159 et entier contiendra 3.0. Ce comportement rend la fonction utile pour séparer rapidement les deux parties d'un nombre flottant sans avoir à effectuer des opérations manuelles.
- Utilisation avec d'autres types numériques : Bien que la fonction modf prenne un paramètre de type double, elle peut être utilisée sur d'autres types numériques en les convertissant en double via un cast explicite. Cependant, il est important de noter que cela peut introduire des erreurs de précision, particulièrement pour des types flottants avec moins de précision que double (comme float), ce qui doit être pris en compte dans les calculs nécessitant une grande exactitude.
- Applications pratiques : modf est particulièrement utile dans des situations où vous devez travailler avec des valeurs flottantes et extraire rapidement la partie entière et la partie fractionnaire pour des calculs séparés. Cela peut inclure des tâches comme le traitement de coordonnées géographiques (par exemple, séparer la partie entière pour la latitude et la partie fractionnaire pour les minutes), ou dans les calculs de transformation de données où la distinction entre la partie entière et la fraction est importante.
Exemple
Voici quelques exemples typiques de l'utilisation de cette fonction :
![](../../IMAGES/play.gif)
- #include <iostream>
- #include <cmath>
-
- int main()
- {
- double temp;
- temp = 9;
- std::cout << "modf(-81,9) = " << temp << "," << modf(-81,&temp) << std::endl;
- temp = 3;
- std::cout << "modf(15,3) = " << temp << "," << modf(15,&temp) << std::endl;
- temp = 3;
- std::cout << "modf(16,3) = " << temp << "," << modf(16,&temp) << std::endl;
- temp = 3;
- std::cout << "modf(16.9,3) = " << temp << "," << modf(16.9,&temp) << std::endl;
- temp = 3;
- std::cout << "modf(16.8,3) = " << temp << "," << modf(16.8,&temp) << std::endl;
- temp = 3;
- std::cout << "modf(16.7,3) = " << temp << "," << modf(16.7,&temp) << std::endl;
- temp = 3;
- std::cout << "modf(16.6,3) = " << temp << "," <<modf(16.6,&temp) << std::endl;
- temp = 3;
- std::cout << "modf(16.5,3) = " << temp << "," <<modf(16.5,&temp) << std::endl;
- temp = 3;
- std::cout << "modf(16.4,3) = " << temp << "," << modf(16.4,&temp) << std::endl;
- temp = 3;
- std::cout << "modf(16.3,3) = " << temp << "," << modf(16.3,&temp) << std::endl;
- temp = 3;
- std::cout << "modf(16.2,3) = " << temp << "," << modf(16.2,&temp) << std::endl;
- temp = 3;
- std::cout << "modf(16.1,3) = " << temp << "," << modf(16.1,&temp) << std::endl;
- temp = 3;
- std::cout << "modf(17,3) = " << temp << "," << modf(17,&temp) << std::endl;
- temp = 3;
- std::cout << "modf(18,3) = " << temp << "," << modf(18,&temp) << std::endl;
- temp = 3;
- std::cout << "modf(19,3) = " << temp << "," << modf(19,&temp) << std::endl;
- temp = 1;
- std::cout << "modf(0,1) = " << temp << "," << modf(0,&temp) << std::endl;
- return 0;
- }
on obtiendra le résultat suivant :
modf(-81,9) = -81.0000,-0.0000modf(15,3) = 15.0000,0.0000
modf(16,3) = 16.0000,0.0000
modf(16.9,3) = 16.0000,0.9000
modf(16.8,3) = 16.0000,0.8000
modf(16.7,3) = 16.0000,0.7000
modf(16.6,3) = 16.0000,0.6000
modf(16.5,3) = 16.0000,0.5000
modf(16.4,3) = 16.0000,0.4000
modf(16.3,3) = 16.0000,0.3000
modf(16.2,3) = 16.0000,0.2000
modf(16.1,3) = 16.0000,0.1000
modf(17,3) = 17.0000,0.0000
modf(18,3) = 18.0000,0.0000
modf(19,3) = 19.0000,0.0000
modf(0,1) = 0.0000,0.0000
Voir également
Langage de programmation - C++ - Référence de procédures et fonctions - fmod
Langage de programmation - C++ - Référence de procédures et fonctions - ldexp
Langage de programmation - C - Référence de procédures et fonctions - modf
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 733.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 180.
Dernière mise à jour : Lundi, le 3 août 2015