Une boucle d'addition pour un entier

2006-12-23 19:43

Voici un programme erroné (une boucle qui parcourt la liste des entiers):
Puisque cela prend moins de temps sur des ordinateurs rapides, il est beaucoup plus difficile
de détecter ces problèmes. Le programmeur a plus de chance de ne pas s'en apercevoir.

/*
 *  source      : add.c
 *  compilation : gcc add.c -o add
 *  exécution   : ./add
 *  licence     : publique, sans copyright
 */ 
int main(void) { int a=0; while(++a>0); return 0; }


Voici des résultats sur divers ordinateurs:
(time ./add)
        P2Cel-300  P3Cel-566  P4 2.2Ghz  P4 2.8Ghz
real    0m51.801s  0m30.738s  0m3.779s   0m6.629s
user    0m51.051s  0m27.440s  0m3.776s   0m6.624s
sys     0m0.068s   0m0.070s   0m0.000s   0m0.004s

P2-Cel 300Mhz: Pentium II (Deschutes) 300.737 (avec environnement graphique) - 0.26 - PC
P3-Cel 566Mhz: Pentium III (Coppermine) 564.772 (sans environnement graphique) - 0.39 - vserver
P4 2.2Ghz: Intel(R) Pentium(R) 4 CPU 2.26GHz (sans d'environnement graphique) - 0.05 - PC
P4 2.8Ghz: Intel(R) Pentium(R) 4 CPU 2.80GHz (avec environnement graphique) - 0.29 - Laptop

Évidemment, sur un ordinateur 64bits, l'entier est codé sur 64 bits et 
la boucle devrait effectuer plus d'itérations.