« Programmation C/Types de base » : différence entre les versions

Contenu supprimé Contenu ajouté
m →‎Chaîne littérale : orthographe
Un des codes C d'exemple était inutile au possible (boucle qui répétait 1000fois EXACTEMENT la même chose : for(...) i = j * 0.1; ). De plus, il était conseillé comme exemple mais ... amenait tout de même à une erreur de précision...
Ligne 317 :
Le résultat est 99,999046, ce qui montre que la précision du type <code>float</code> est en général mauvaise, d'autant plus que le nombre 0,1 n'est pas représentable de manière exacte en binaire<ref>0,1<sub>10</sub> = 0.0001100110011...<sub>2</sub></ref>. Il est ainsi conseillé d'utiliser le type <code>double</code> à la place de <code>float</code> autant que possible. Dans ce cas de figure, il est préférable d'éviter les accumulations d'erreurs infinitésimales, en réécrivant le code de la manière suivante :
 
<source lang="c" line="1">
#include <stdio.h>
 
Ligne 323 :
{
float i;
int j = 1000;
 
for (j = 0; j < 1000; j++)
{i = j * 0.1;
}
i = j * 0.1;
}
printf("i = %f\n", i);
return 0;
Ligne 333 ⟶ 332 :
</source>
 
Le résultat est alors 100.0, sans aucune erreur d'accumulation et d'arrondis.
C'est probablement plus coûteux, car on effectue un millier de multiplications au lieu d'un millier d'additions, mais cela permet d'avoir une précision nettement meilleure que le code précédent.
 
Pour plus d'informations sur ce domaine, un wikilivre [[Mathématiques/Arithmétique flottante|Arithmétique flottante]] est disponible.