FLOAT:il ne maffiche pas 2 147 483 649 !!
Fermé
missa ginsu
Messages postés
2
Date d'inscription
mardi 26 avril 2011
Statut
Membre
Dernière intervention
27 avril 2011
-
27 avril 2011 à 00:20
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 - 27 avril 2011 à 10:54
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 - 27 avril 2011 à 10:54
A voir également:
- FLOAT:il ne maffiche pas 2 147 483 649 !!
- Jdownloader 2 - Télécharger - Téléchargement & Transfert
- 2 comptes whatsapp - Guide
- Epson scan 2 ✓ - Forum Imprimante
- 2 ecran pc - Guide
- Scratch 2 gratuit - Télécharger - Éducatifs
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
KX
Messages postés
16668
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2023
3 004
27 avril 2011 à 10:54
27 avril 2011 à 10:54
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