fabs() : valeur absolue
fmod() : reste dans un quotient
frexp() : mantisse normalisée et exposant en base 2
ldexp() : produit par une puissance de 2
modf() : partie fractionnaitre et partie entière
Prototype:
- double fabs( double x);
- double fmod( double x, double y);
- double ldexp( double a, int n)
- double frexp( double x, int * pexp)
- double modf( double x, double * pentx)
dans: <math.h>
Code objet:
dans libm.a (généralement dans le répertoire /usr/lib)
à l'édition de liens sur UNIX, précisez l'option -lm afin d'utiliser la bibliothhèque /usr/lib/libm.a.
Exemples:
- xlc source.c -lm # système AIX.
- cc source.c -lm
Description:
- fabs(x) calcule la valeur absolue de x.
- fmod(x,y), avec y!=0, est l'équivalent du 'modulo' en arithmétique entière, et fournit: x - trunc(x/y).
- y = frexp(x,&n) où x, y sont des doubles et n un entier n:
- si x est non nul, y et n sont calculés tels que:
x = y*(2**n) avec 0.5 <= |y| < 1 (y est appelé mantisse et x est appelé exposant)
- si x = 0, alors y=0 et n=0.
- b = ldexp(a,n) renvoie le résultat de la mutltiplication de a par 2 elevé à la puissance n: b = a*(2**n).
Le résultat peut ne pas être représentable sur un double.
- a = modf(x,&entx) décompose x en partie entière entx et partie fractionnaire a, comprise entre 0 et 1.
Les valeurs entx et a ont le même signe que x et de plus:
x = entx + a
Valeur renvoyée:
- la valeur calculée, s'il n'y a pas de problème.
- si y = 0, fmod(x,y) renvoie NaN et positionne la variable globale errno à EDOM.
- Débordements à l'utilisation de ldexp:
- si le résultat est trop grand, ldexp() renvoie +/- HUGE_VAL, et positionne la variable globale errno à ERANGE;
- si le résultat est trop petit, ldexp() renvoie 0, et positionne la variable globale errno à ERANGE.
Voir aussi:
Portabilité:
Exemple:
/*
Utilisation standard de chaque fonction.
Exemples de débordement avec les fonctions fmod() et ldexp().
*/
#include
#include
#include /* Pour utilisatiçàon de errno */
void main(void) {
double x,y,r,entx;
int n;
x=7; y=M_PI; r=fmod(x,y);
printf("\n7 modulo(pi): fmod(%.2lf,%.9lf)=%.9lf\n", x, y, r);
x=7; y=0; r=fmod(x,y);
printf("Erreur: fmod(%.2lf,%.9lf)=%.9lf et errno=%d\n",
x, y, r, errno);
x=1234.567; r=frexp(x,&n);
printf("\nfrexp(%.3lf,&n)=%.3lf et n=%d\n", x, r, n);
printf("\nldexp(%.3lf,%d)=%.3f\n", r, n, ldexp(r,n));
x=1.2; n=1024; r=ldexp(x,n);
printf("Débordement (valeur trop grande): ldexp(%.1lf,%d)=%.1lf et errno=%d\n",
x, n, r, errno);
x=1.2; n=-1024; r=ldexp(x,n);
printf("Débordement (valeur trop petite): ldexp(%.1lf,%d)=%.1lf et errno=%d\n",
x, n, r, errno);
x=-1234.567; r=modf(x,&entx);
printf("\nmodf(%.3lf,&entx)=%.3lf et entx=%.3lf\n", x, r, entx);
}