# Conseils de codage en C/Qualité numérique

Maintenabilité
* Pour la lisibilité
* Pour la détection des erreurs
* Pour des modifications plus faciles
Fiabilité
* Pour la robustesse
* Pour les performances
* Pour la sécurité
Qualité
* Pour une utilisation plus facile
* Pour la qualité numérique
Maintenabilité
* Pour la lisibilité
* Pour la détection des erreurs
* Pour des modifications plus faciles
Fiabilité
* Pour la robustesse
* Pour les performances
* Pour la sécurité
Qualité
* Pour une utilisation plus facile
* Pour la qualité numérique
Livre
[ Modifier le sommaire ]
L'application de ces règles doit permettent d'éviter des erreurs de calcul.

## Types homogènes dans les calculs (c_num_1)

Une expression arithmétique ne doit comporter que des éléments du même type.

### Justification

Évite les erreurs de calcul dues aux règles de conversions implicites des langages. C’est le programmeur qui doit définir explicitement les conversions de type. Les conséquences du mélange d'opérandes de même type :
* Perte de précision par troncature de la mantisse.
* Perte de la valeur numérique, par exemple : un grand entier long devient un entier court négatif.

### Exemple

n ne vaut pas -1 à la fin, mais une valeur du genre : 2147483647, ce qui faussera beaucoup les calculs ultérieurs , pour avoir un résultat correct il aurait fallut écrire n = n/(int) u;

### Outils

Les compilateurs et les outils de contrôle statique comme splint émettent des avertissements.

## Ne pas tester l'égalité de deux réels (c_num_2)
### Justification

Améliore la qualité numérique.
a = a +1 dans une boucle peut produire la valeur a = 9.999999999 au lieu de 10.0, une instruction du genre if (a==10.0) ne fonctionnera pas comme prévue.
Au lieu de if ( A == B )
Écrire if ( fabs( A - B ) < EPS ) EPS est une valeur très petite qui dépend de la précision de la machine, utiliser si disponible des constantes symboliques définies sur le système.

### Outils

Les compilateurs et les outils de contrôle statique comme splint émettent des avertissements.

## Limitez les erreurs numériques (c_num_3)

Évitez les phénomènes d'annulation, d’absorption et d’arrondi.
* Annulation: Erreur qui se produit lors de la soustraction de deux valeurs trop proches.
* Absorption : Erreur qui se produit lorsqu'on additionne deux valeurs d'un ordre de grandeur trop différent. Ce phénomène est sensible lorsqu'on réalise l'opération un grand nombre de fois.
* Arrondi : pertes de chiffres significatifs dans la partie décimale du nombre.

### Justification

Les logiciels informatiques tentent de manipuler des nombres réels.
L'ensemble mathématique des décimaux, déjà plus restreint, est infini en étendue : il contient les nombres compris entre plus à moins l'infini. L'écart entre deux nombres peut être infiniment petit. Par contre les nombres en machine sont stockés dans un espace mémoire de taille très limité (32, 64, 128 bits...). Les nombres y sont représentés par une mantisse et un exposant codés sur un nombre fini de bits. On pourrait comparer le domaine de représentation des nombres en machine à une tranche de gruyère pleine de trous.
* Les résultats trop grands ou trop petits sont tronqués ou changent de signe.
* Une valeur trop petite peut être ignorée lorsqu'elle est additionnée à un grand nombre.
* La différence entre deux nombres peut être considérée comme nulle alors que ces nombres sont différents.
Il faut parfois réorganiser les expressions numériques et leur ordre de calcul pour éviter ces erreurs.