Question

J'essaie de comprendre quand la coulée provoque une perte de données et son fonctionnement. Donc, pour les exemples suivants, j'essaie de comprendre s'il y a une perte de données et si oui pourquoi: (i - int(4),f - float(4),d-double(8))

i == (int)(float) i; // sizeof(int)==sizeof(float) <- no loss
i == (int)(double) i; // sizeof(int)!=sizeof(double) <- possible loss
f == (float)(double) f;// sizeof(double)!=sizeof(float) <- possible loss
d == (float) d;// sizeof(double)!=sizeof(float) <- possible loss

Est-il suffisant pour baser la réponse uniquement sur les tailles de type? (+ Round)

Était-ce utile?

La solution

En supposant des INT 32 bits et des flotteurs / doubles normaux 4 et 8 octets IEEE-754, ce serait:

i == (int)(float) i;     // possible loss (32 -> 23 -> 32 bits)
i == (int)(double) i;    // no loss (32 -> 52 -> 32 bits)
f == (float)(double) f;  // no loss (23 -> 52 -> 23 bits)
d == (float) d;          // possible loss (52 -> 23 -> 52 bits)

Notez que INT a 32 bits de précision, Float a 23 bits, le double en a 52.

Autres conseils

La mémoire allouée pour stocker la variable d'un type n'est pas le seul fait pour vous à considérer la perte de données. Généralement, le chemin vers l'arrondi et comment le processeur traite les données numériques en cas de débordement serait d'autres aspects que vous voudrez peut-être examiner.

Parce que le sizeof Signale la même taille en mémoire ne signifie pas qu'il y a une perte de données.

Considérez 0,5.

Peut stocker cela dans un flotteur mais ne peut pas le stocker dans un entier.

Donc perte de données.

C'est-à-dire que je veux 0,5 de ce gâteau. Ne peut pas représenter cela comme un entier. Soit rien ou beaucoup de gâteaux. Miam

Pourquoi entier? Parce que vous n'avez peut-être besoin que de numéros entiers par exemple un ID_num

Pourquoi flotter? Parce que vous devrez peut-être travailler sur des nombres réels % calculations

Pourquoi double? Lorsque vous avez de vrais nombres qui ne peuvent pas rentrer dans la taille du flotteur

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top