J'essayais de comprendre la représentation des points flottants en C à l'aide de ce code ( float code> et
int code> sont 4 octets sur ma machine):
int x = 3;
float y = *(float*) &x;
printf("%d %e \n", x, y);
3 Réponses :
Les numéros de points flottants IEEE avec des champs exposants de tous les 0 sont «dénormalisés». Cela signifie que le 1 implicite devant la Mantissa n'est plus actif. Cela permet de représenter de très petits nombres. Voir Cet article Wikipedia pour plus d'explications . Dans votre exemple, le résultat serait 3 * 2 ^ -149 p>
Dans les détails, il est décrit http://fr.wikipedia.org/wiki/eeee_754- 2008 Cette norme supposait que vous changez de MANTISSA à gauche jusqu'à ce que cela me cache un peu de sens (exponeur croissant). Dans votre cas, vous avez une expression 1 + 2 ^ (- 23) - alors vous obtenez une réponse correcte 4.9..e-32 p>
Pourriez-vous montrer de travailler pour votre réponse? Il ne semble pas être correct en ce qui concerne simplement le brancher 1 + 2 ^ (- 23) ou la réponse correcte étant 4,9E-32.
-127 dans l'exposant est réservé aux nombres dénormé. Votre calcul est destiné aux nombres normalisés pendant que votre flotteur est un flotteur dénormé.
Les nombres dénormalisés sont calculés à l'aide d'une méthode similaire, mais: p>
Cela signifie que le calcul est à la place: p> ce qui précède est python, où ** code> signifie la même chose que < Code> ^ code> p> p>
en.wikipedia.org/wiki/single_precision_floating-point_format
Sur quelle machine essayez-vous cela? Quelle est l'ordre d'octet de l'hôte? Big Endian? Petit endian?
X86_64 machine Linux. Petit endian.