Float et Int de 4 Octets? Comment Venir?
Int fait 4 octets avec une gamme de +- 2^31 Le flotteur est de 4 octets avec une gamme de +- 1.2 E(+- 38)
Float englobe tellement plus de points sur la ligne réelle et est pourtant égale à la taille de int. La représentation de signe-exposant-Fraction de float est-elle si impressionnante (ou le complément 2 de Int si pathétique) que cette disparité de taille surgit? Ai-je raté quelque chose?
je trouve qu'il est très surprenant que quelque chose qui représente (presque) l'intégralité de la ligne réelle est de l' la même taille que celle qui représente les entiers.
6 réponses
eh Bien, voici une explication rapide:
Un int et float prennent habituellement un "mot" dans la mémoire. Aujourd'hui, avec le passage à des systèmes 64 bits, cela peut signifier que votre mot est 64 bits, ou 8 octets, permettant la représentation d'un énorme éventail de nombres. Ou, il pourrait encore être un système de 32 bits signifiant que chaque mot en mémoire prend 4 octets. Généralement, la mémoire peut être consulté sur un mot par mot.
La différence entre int
et float
n'est pas leur espace physique dans mémoire, mais de la façon dont L'ALU (unité logique arithmétique) se comporte avec le nombre. Un int représente directement le numéro correspondant en binaire (enfin, presque--notation du complément de two). float
d'un autre côté est codé (typiquement en format IEEE 754 standard) pour représenter un nombre sous forme exponentielle (c.-à-d. 2,99*10^6 est sous forme exponentielle).
votre malentendu je pense réside dans l'idée fausse qu'un point flottant peut représenter plus information. Alors que les float
s peut représenter des nombres de plus grande grandeur, il ne peut pas les représenter avec autant de précision, parce qu'il doit tenir compte de l'encodage de l'exposant. L'exposant lui-même pourrait être un assez grand nombre. Donc le nombre de chiffres significatifs que vous obtenez d'un nombre de virgule flottante est moins (ce qui signifie moins d'information est représentée) et alors que int
s représentent une gamme d'entiers, la magnitude des nombres qu'ils représentent est beaucoup plus petite.
je trouve très surprenant que quelque chose qui représente (virtuellement) toute la ligne réelle soit de la même taille que celle qui représente les entiers.
peut-être cela deviendra moins surprenant une fois que vous réaliserez qu'il y a beaucoup d'entiers qu'un 32-bit int
peut représenter exactement, et un 32-bit float
can'T.
float
peut représenter moins de distinct nombre int
, mais ils sont répartis sur une éventail.
Il est aussi intéressant de noter que l'espacement entre deux floats
s'élargit au fur et à mesure qu'on s'éloigne de zéro, alors qu'il reste constant pourints
.
je crois que le point important ici est que l'int est exact, tandis que le flotteur peut être arrondi. Une partie des données dans un flotteur décrit l'emplacement de la virgule, tandis qu'une autre partie détermine la valeur. Ainsi, alors que vous pourriez être en mesure de montrer 1.2E38, seuls les quelques premiers chiffres peuvent être correcte et le reste peut être rempli avec des 0.
:http://en.wikipedia.org/wiki/Floating_point
"avec sept chiffres décimaux pourrait en outre représenter 1.234567, 123456.7, 0.00001234567, 1234567000000000, et ainsi de suite"
cela dépend de la façon dont le système particulier implémente les flotteurs.
Peut-être que vous devriez apprendre combien de nombres à virgule flottante sont représentés dans un ordinateur. C'est très différent de la façon dont les entiers sont représentés.
il est également intéressant de noter qu'un int n'est pas toujours long de 4 octets, cela dépend du système.
les deux types représentent le même nombre de points sur la ligne réelle - ils sont simplement espacés différemment. La différence entre le flotteur le plus haut et le deuxième plus haut est ca. 256!
norme pour la virgule flottante selon les normes exige une base=2 au lieu de base=10 et 24 chiffres (précision). Comme ce n'est pas la base 10, le format de base 2 est capable de représenter seulement un ensemble défini de nombres réels (qui est la raison inhérente d'erreur dans la représentation des nombres réels). Cela signifie aussi, comme vous bien que plus tôt, que flottant ne représente pas beaucoup plus de nombres par rapport à int.