#include #include #include main() { float var32,previous_var32,resultat32; double var64,previous_var64,resultat64; int i; /* Initialisation de 2 nombres avec valeur 1 var32 a une simple precision (8 chiffres) var64 a une double precision (16 chiffres) */ var32=1.0; var64=1.0; i=0; resultat32=2.0; resultat64=2.0; /* Ce test devrait etre, mathematiquement, toujours verifie */ while (resultat32 > 1) { previous_var32 = var32; var32 = var32/2; i=i+1; /* Quand var32 est trop proche de l'epsilon machine, 1+var32 = 1 */ resultat32 = 1.0+var32; } printf("Simple precision:%le, i=%d\n",previous_var32,i); i=0; /* Meme test avec une double precision */ while (resultat64 > 1) { previous_var64 = var64; var64 = var64/2; i=i+1; resultat64 = 1.0+var64; } printf("Double precision:%le, i=%d\n",previous_var64,i); i=0; var32=1.0; /* Si on compare a 0, on regarde la precision de l'exposant */ /* Avec simple precision */ while (var32 > 0) { previous_var32 = var32; var32 = var32/2; i=i+1; } printf("Underflow simple:%le, i=%d\n",previous_var32,i); i=0; var64=1.0; /* Avec double precision */ while (var64 > 0) { previous_var64 = var64; var64 = var64/2; i=i+1; } printf("Underflow double:%le, i=%d\n",previous_var64,i); }