MODF |
Modulo à virgule |
---|---|
Langage C | math.h |
Syntaxe
double modf(double x,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).
Algorithme
MODULE MODF(x, iptr) * Vérifier si x est NaN ou infini SI is_nan(x) ou is_infinite(x) ALORS * La partie entière est égale à x iptr ← x * Pas de partie fractionnaire RETOURNE 0 FIN SI * Calculer la partie entière de x SI x ≥ 0 ALORS entier ← floor(abs(x)) SINON entier ← ceil(abs(x)) x -1 SIN SI * Entreposer la partie entière dans iptr ↑iptr ← entier * Calculer et retourner la partie fractionnaire RETOURNE x - entier |
Remarques
- Manipulation des nombres à virgule flottante : modf est très utile lorsqu'on a besoin de traiter séparément les parties entière et fractionnaire d'un nombre flottant. Par exemple, pour isoler les décimales dans des calculs ou pour effectuer des opérations spécifiques sur la partie entière ou fractionnaire.
- Valeur de retour : La fonction retourne la partie fractionnaire du nombre fourni. Si le nombre est négatif, la partie fractionnaire retournée conserve le même signe que le nombre initial. Cela garantit une gestion cohérente des nombres négatifs.
- Gestion des cas particuliers : Pour les valeurs spéciales comme 0.0, modf retourne 0 pour la partie fractionnaire et entrepose 0 dans iptr pour la partie entière. De même, pour les valeurs infinies ou NaN, le comportement suit les règles standards de l'arithmétique IEEE.
- Effets secondaires via pointeur : L'utilisation d'un pointeur pour retourner la partie entière permet à modf de fournir deux résultats distincts (entier et fractionnaire) en un seul appel de fonction. Cela évite de devoir faire des manipulations supplémentaires dans le programme appelant.
- Application dans le traitement des décimales : modf est souvent utilisée dans les applications nécessitant un traitement précis des décimales. Par exemple, dans des calculs financiers ou dans des algorithmes de rendu graphique, où il est crucial de manipuler séparément les parties entière et fractionnaire.
- Compatibilité avec les types étendus : Outre la version double précision modf, il existe des variantes pour d'autres types flottants : modff pour les nombres en simple précision (float) et modfl pour ceux en précision longue (long double). Cela garantit une compatibilité avec différents besoins de précision.
- Différence avec les autres fonctions de division : Contrairement à des fonctions comme fmod ou remainder, modf ne traite pas les divisions. Elle se concentre uniquement sur la séparation des parties entière et fractionnaire, sans modifier la valeur initiale ou effectuer des opérations arithmétiques supplémentaires.
Exemple
Voici quelques exemples typiques de l'utilisation de cette fonction :
Essayer maintenant !
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
-
- int main()
- {
- double temp;
- temp = 9;
- printf("modf(-81,9) = %.4f,%.4f\n",temp,modf(-81,&temp));
- temp = 3;
- printf("modf(15,3) = %.4f,%.4f\n",temp,modf(15,&temp));
- temp = 3;
- printf("modf(16,3) = %.4f,%.4f\n",temp,modf(16,&temp));
- temp = 3;
- printf("modf(16.9,3) = %.4f,%.4f\n",temp,modf(16.9,&temp));
- temp = 3;
- printf("modf(16.8,3) = %.4f,%.4f\n",temp,modf(16.8,&temp));
- temp = 3;
- printf("modf(16.7,3) = %.4f,%.4f\n",temp,modf(16.7,&temp));
- temp = 3;
- printf("modf(16.6,3) = %.4f,%.4f\n",temp,modf(16.6,&temp));
- temp = 3;
- printf("modf(16.5,3) = %.4f,%.4f\n",temp,modf(16.5,&temp));
- temp = 3;
- printf("modf(16.4,3) = %.4f,%.4f\n",temp,modf(16.4,&temp));
- temp = 3;
- printf("modf(16.3,3) = %.4f,%.4f\n",temp,modf(16.3,&temp));
- temp = 3;
- printf("modf(16.2,3) = %.4f,%.4f\n",temp,modf(16.2,&temp));
- temp = 3;
- printf("modf(16.1,3) = %.4f,%.4f\n",temp,modf(16.1,&temp));
- temp = 3;
- printf("modf(17,3) = %.4f,%.4f\n",temp,modf(17,&temp));
- temp = 3;
- printf("modf(18,3) = %.4f,%.4f\n",temp,modf(18,&temp));
- temp = 3;
- printf("modf(19,3) = %.4f,%.4f\n",temp,modf(19,&temp));
- temp = 1;
- printf("modf(0,1) = %.4f,%.4f\n",temp,modf(0,&temp));
- 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 : Mardi, le 28 juillet 2015