mardi 13 décembre 2011

les erreurs de calcul

que fait ce programme ?

#include <stdio.h>
#include <math.h>
#define debut 100
#define pas 0.01
int main(void)
 {


  float nombre=debut;
  int compte=0,tous_les;
  puts("afficher les résultats intermédiaires
       tous les ? (333 par exemple) ?");
  scanf("%d",&tous_les);
  while (fabs(nombre-(debut+(compte*pas)))<pas)
   {
    nombre+=pas;
    if (!(++compte%tous_les))
       printf("valeur obtenue %12.8f, au lieu de %6.2f en %d calculs\n",
         nombre,(float)(debut+(compte*pas)), compte);
   }
  printf("erreur de 100%% en %d calculs\n",compte);
 }
Correction
Ce programme démontre les erreurs de calcul toujours effectuées sur des nombres réels. On additione successivement 0.01 (qui n'a pas de représentation finie en binaire) à un réel initialement nul. On compte le nombre de calculs jusqu'à obtenir une erreur de 100%. Dans ce cas il faut 16246 calculs. On peut essayer d'autres pas et d'autres débuts.

Aucun commentaire:

Enregistrer un commentaire