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

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
Tavernierbot (discussion | contributions)
m Bot: Retouches cosmétiques
Ligne 15 : Ligne 15 :
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.
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.


==Exponentiations==
== Exponentiations ==
<pre>
<pre>
double exp ( double x );
double exp ( double x );
Ligne 22 : Ligne 22 :
''exp'' calcule ''e'' élevé à la puissance de ''x'' (<math>e^x</math>) où ''e'' est la base des logarithmes naturels (ln(e) = 1). ''pow'' calcule la valeur de ''x'' élévé à la puissance ''y'' (<math>x^y</math>).
''exp'' calcule ''e'' élevé à la puissance de ''x'' (<math>e^x</math>) où ''e'' est la base des logarithmes naturels (ln(e) = 1). ''pow'' calcule la valeur de ''x'' élévé à la puissance ''y'' (<math>x^y</math>).


===Erreurs===
=== Erreurs ===
La fonction ''pow'' peut déclencher l'erreur suivante :
La fonction ''pow'' peut déclencher l'erreur suivante :
*'''EDOM''' : ''x'' est négatif, et ''y'' n’est pas un entier.
*'''EDOM''' : ''x'' est négatif, et ''y'' n’est pas un entier.


==Logarithmes==
== Logarithmes ==
<pre>
<pre>
double log ( double x );
double log ( double x );
Ligne 33 : Ligne 33 :
''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''.
''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===
=== Erreurs ===
* '''EDOM''' : ''x'' est négatif ;
* '''EDOM''' : ''x'' est négatif ;
* '''ERANGE''' : ''x'' est nul.
* '''ERANGE''' : ''x'' est nul.


==Racine carrée==
== Racine carrée ==
<pre>
<pre>
double sqrt ( double x );
double sqrt ( double x );
Ligne 43 : Ligne 43 :
Renvoie la racine carrée de ''x''.
Renvoie la racine carrée de ''x''.


===Erreurs===
=== Erreurs ===
* '''EDOM''' : ''x'' est négatif.
* '''EDOM''' : ''x'' est négatif.


==Sinus, cosinus, tangente==
== Sinus, cosinus, tangente ==
<pre>
<pre>
double sin ( double x );
double sin ( double x );
Ligne 55 : Ligne 55 :
Note : les angles retournés sont en radians (intervalle -pi/2 à pi/2).
Note : les angles retournés sont en radians (intervalle -pi/2 à pi/2).


==Arc sinus, arc cosinus==
== Arc sinus, arc cosinus ==
<pre>
<pre>
double asin ( double x );
double asin ( double x );
Ligne 61 : Ligne 61 :
</pre>
</pre>


===Erreurs===
=== Erreurs ===
* '''EDOM''' : ''x'' est inférieur à 1 ou supérieur à -1.
* '''EDOM''' : ''x'' est inférieur à 1 ou supérieur à -1.


==Arc tangente==
== Arc tangente ==
<pre>
<pre>
double atan ( double x );
double atan ( double x );

Version du 18 novembre 2006 à 20:20


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 :

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

mais aussi ajouter l'option -lm lors de la compilation (ou plus précisément lors de l'édition des liens).

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é :

  1. Positionner la variable errno à 0.
  2. Appeler la fonction mathématique.
  3. Vérifier que errno 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.

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 );