Pouvez vous m'expliquer svp des notions corrigés que je n'ai pas compris?
Question 1.
Qu'est ce que les deux programmes suivants affiche ?
- Code: Tout sélectionner
double n = 10.0;
println(d/0);
=> pourquoi il affiche +infinie
Question 2:
On va s'interesse au test suivant : (0.3f -0.2f) == (0.2f-0.1f)
-Quel est la valeur binaire de 0.3f ?
-Ecrire en binaire 0.2 et 0.1.
-Calculer 0.3f-0.2f et 0.2f-0.1f en utilisant leur représentation binaireSolution :
Solution :
La conversion de 0.3 donne lieu a la suite : 0.6,1.2,0.4,0.8,1.6...
et ainsi la representation de 0.3 en base deux est infinie : 0:010011001100(1100)
En normalisant, on obtient :1.0011001100(1100)*10^-10 // Comment on n'a trouvé 1.0011001100(1100)*10^-10
Examinons, les 23 premiers bits de la mantisse apres le point et le 24eme : 001100110011001100110011. //Comment on n'a trouvé ca: 001100110011001100110011.
Le 24eme bit etant egal a 1, il y a un arrondi.
Ce qui sera memorise dans la mantisse est alors : 00110011001100110011010 k La valeur memorisee
dans le champ exposant est : 01111111 + (-10) = 01111101 // Comment on n'a trouvé ca 00110011001100110011010 k et ca 01111111 + (-10) = 01111101
La representation sur 32 bits est donc : 00111110100110011001100110011010. // pourquoi ce nombre ?
-> 0.2 = 00111110010011001100110011001101 ;// pourquoi ce nombre ?
0.1 = 00111101110011001100110011001101;// pourquoi ce nombre ?
-> La representation de 0.3f - 0.2f exprimee sous forme hexadecimale est 3DCCCCCE alors que celle de
0.2f - 0.1f est 3DCCCCCD. //Comment on n'a trouvé ces formes hexadécimales ?
La valeur du test d'egalite des deux expressions est donc inevitablement false.
Merci d'avance
Bonne soirée