« Programmation C/Mathématiques » : différence entre les versions

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
-lm -> GCC
(intro) simplification et renvoi au chapitre de gestion d'erreur
Ligne 2 : Ligne 2 :
<noinclude>{{Programmation C}}
<noinclude>{{Programmation C}}
</noinclude>
</noinclude>
Pour pouvoir utiliser les fonctions mathématiques, il faut non seulement utiliser le fichier d'entêtes ''math'' ainsi que ''errno.h''. Ce dernier contient les codes d'erreurs retournés via la variable globale ''errno'' lorsqu'un des arguments passés est invalide :
Pour pouvoir utiliser les fonctions mathématiques, il faut utiliser l'en-tête ''math'', ainsi que ''errno.h'' pour gérer les erreurs :
<pre>
<pre>
#include <math.h>
#include <math.h>
Ligne 8 : Ligne 8 :
</pre>
</pre>


Comme pour un certain nombre de fonctions de la biliothèques standard, il est en effet nécessaire d'utiliser <tt>errno</tt> pour détecter l'erreur d'une fonction mathématique (voir le chapitre sur la gestion d'erreurs pour voir comment utiliser <tt>errno</tt>).
La gestion portable des erreurs est encore un grief à porter au casier déjà bien lourd du langage C. Dans le cas où la détection d'erreur est critique, voici la marche à suivre pour détecter qu'une fonction mathématique a échoué :
# Positionner la variable <code>errno</code> à 0.
# Appeler la fonction mathématique.
# Vérifier que <code>errno</code> vaut toujours 0.

En effet, dans la plupart des cas, ces fonctions ne positionnent cette variable qu'en cas d'erreur, laissant la valeur inchangée en cas de succès. Il faut donc s'assurer qu'une valeur différente de 0, est bien le résultat du dernier appel et non d'un autre antérieur. La pénibilité est surtout dû au fait que les fonctions mathématiques ne renvoient pas de code d'erreur, contrairement à la plupart des autres fonctions utilisant aussi ''errno'', ce qui oblige à positionner explicitement sa valeur avant l'appel. Cela dit, rares sont les cas où on a besoin d'une attitude aussi paranoïaque.


'''Note :'''
'''Note :'''

Version du 18 mai 2007 à 16:42


Pour pouvoir utiliser les fonctions mathématiques, il faut utiliser l'en-tête math, ainsi que errno.h pour gérer les erreurs :

#include <math.h>
#include <errno.h>

Comme pour un certain nombre de fonctions de la biliothèques standard, il est en effet nécessaire d'utiliser errno pour détecter l'erreur d'une fonction mathématique (voir le chapitre sur la gestion d'erreurs pour voir comment utiliser errno).

Note : Sur certains compilateurs comme GCC, il est nécessaire d'ajouter durant l'édition des liens une option pour que la « librairie mathématique » soit liée au programme. Pour GCC, cette option est -lm. Sans cette option, le programme pourra compiler, mais le résultat à l'exécution sera surprenant...

Exponentiations

double exp ( double x );
double pow ( double x, double y );

exp calcule e élevé à la puissance de x () où e est la base des logarithmes naturels (ln(e) = 1). pow calcule la valeur de x élévé à la puissance y ().

Erreurs

La fonction pow peut déclencher l'erreur suivante :

  • EDOM : x est négatif, et y n’est pas un entier.

Logarithmes

double log ( double x );
double log10 ( double x );

log calcule le logarithme néperien de x (noté généralement ln(x) en mathématiques). log10 calcule le logarithme à base 10 de x.

Erreurs

  • EDOM : x est négatif ;
  • ERANGE : x est nul.

Racine carrée

double sqrt ( double x );

Renvoie la racine carrée de x.

Erreurs

  • EDOM : x est négatif.

Sinus, cosinus, tangente

double sin ( double x );
double cos ( double x );
double tan ( double x );

Note : les angles retournés sont en radians (intervalle -pi/2 à pi/2).

Arc sinus, arc cosinus

double asin ( double x );
double acos ( double x );

Erreurs

  • EDOM : x est inférieur à 1 ou supérieur à -1.

Arc tangente

double atan ( double x );
double atan2 ( double y, double x );