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 -
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 !
A voir également:
- FLOAT:il ne maffiche pas 2 147 483 649 !!
- Format d'affichage d'un float ✓ - Forum C++
- Afficher un float ou double - Forum Programmation
- Afficher un float avec 2 chiffres après la virgule en c ✓ - Forum C++
- Quand dois-je utiliser double et quand float ? - Forum Java
- [C] float à 2 chiffres apres la virgule - Forum C
2 réponses
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
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
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
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