FLOAT:il ne maffiche pas 2 147 483 649 !!

missa ginsu Messages postés 2 Statut Membre -  
KX Messages postés 19031 Statut Modérateur -
aidez moi a répondre a ce casse tete svp: jai écrit un programme tt bete sous gcc ( fedora 12) pr afficher des nombres entiers et réels, le probleme est que quand j'utilise le type "float" pour imprimer le nombr 2 147 483 649e il me met 2 147 483 648.000000 ? or que normalement le max sous float est 3.8x10^38 ???? je sais qu'en mettant unsigned long int ou meme double sa va me lafficher correctement! mais je voudrais comprendre qu'est ce qui c'est passé exactement et comment il a opéré pour mafficher 2 147 483 648.000000 au lieu de 2 147 483 649 ! Me répondre vite SVPPP !

2 réponses

le père
 
Bonjour

Tu sais bien (j'espère) que la représentation standard des nombres dans les ordinateurs a une précision limitée. Avec 2 147 483 648, tu es autour de la limite de la précision des float, tout simplement
le max sous float est 3.8x10^38 : c'est vrai, mais ça n'a jamais voulu dire : tous le entiers de 0 à 3.8x10^38 ont une représentation exacte en float
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Les floats en C sont compilés avec gcc au format IEEE 754 en simple précision.

La représentation de ton nombre 2^32+1 en binaire est un '1', 31 '0' et un '1'.
Or en simple précision, le résultat est tronqué à 23 bits donc les 9 bits restants sont ignorés et implicitement considéré comme des '0', d'où ton résultat 2^32.
En fait ton imprécision est de l'ordre des bits tronqués, soit 2^9=512
0