Le fichier en-tête math.h contient des déclarations de fonctions
mathématiques.
- sin(x) : sinus de x,
- cos(x) : cosinus de x,
- tan(x) : tangente de x,
- asin(x) : arc sinus de x,
- acos(x) : arc cosinus de x,
- atan(x) : arc tangente de x,
- sinh(x) : sinus hyperbolique de x,
- cosh(x) : cosinus hyperbolique de x,
- tanh(x) : tangente hyperbolique de x,
- exp(x) : exponentielle de x (e
),
- log(x) : logarithme népérien de x (ln(x)),
- log10(x) : logarithme décimal de x (log
(x)),
- pow(x, y) : x
,
- sqrt(x) : racine carrée de x,
- ceil(x) : le plus petit entier supérieur ou égal à x,
- floor(x) : le plus grand entier inférieur ou égal à x,
- fabs(x) :
x
,
Les arguments de ces fonctions ainsi que les valeurs qu'elles retournent
sont du type double.
La compilation d'un programme faisant appel à ces fonctions doit être
effectuée avec l'option -lm afin que l'éditeur de liens puissent
résoudre les références externes correspondantes.
Sous UNIX SYSTEM V, la fonction matherr permet de
gérer une erreur qui s'est produite lors de l'utilisation d'une fonction
mathématique. Le programmeur peut écrire sa propre fonction matherr,
laquelle doit respecter la syntaxe suivante :
int matherr(struct exception *exp)
Le type struct exception est défini dans le fichier en-tête
math.h comme :
struct exception {
int type;
char *name;
double arg1, arg2, retval;
};
- type : type de l'erreur,
- DOMAIN : domaine erroné,
- SING : valeur singulière,
- OVERFLOW : dépassement de capacité,
- UNDERFLOW : sous-dépassement de capacité,
- PLOSS : perte partielle de chiffres significatifs,
- TLOSS : perte totale de chiffres significatifs,
- name : nom de la fonction générant l'exception,
- arg1, arg2 : arguments avec lesquels la fonction a été invoquée,
- retval : valeur retournée par défaut, laquelle peut être
modifiée par la fonction matherr.
Si matherr retourne 0, les messages d'erreurs standards
et la valorisation d'errno interviendront, sinon ce ne sera
pas le cas.
Exemple
#include <stdio.h>
#include <math.h>
main()
{
double x, y;
scanf("%lf", &x);
y = log(x);
printf("%f\n", y);
}
int matherr(struct exception *p)
{
puts("erreur detectee");
printf(" type : %d\n", p->type);
printf(" name : %s\n", p->name);
printf(" arg1 : %f\n", p->arg1);
printf(" arg2 : %f\n", p->arg2);
printf(" valeur retournee : %f\n", p->retval);
p->retval = -1.;
return 0;
}
language=C++,basicstyle=,
stringstyle=,showstringspaces=false,
keywordstyle=
,
commentstyle=
numbers=left,numberstyle=,numbersep=5pt,showlines=false,frame=tb
Pr. Marc BUFFAT
buffat@ufrmeca.univ-lyon1.fr
2004-12-01