Pregunta

Trato de entender cuando el lanzamiento causa la pérdida de datos y cómo funciona. Entonces, para los siguientes ejemplos, trato de entender si hay pérdida de datos y, en caso afirmativo, por qué: (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

¿Es suficiente basar la respuesta solo en tamaños de tipo? (+ Redondo)

¿Fue útil?

Solución

Asumiendo ints de 32 bits y 4 y 8 bytes IEEE-754 flotadores/dobles sería:

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)

Tenga en cuenta que int tiene 32 bits de precisión, el flotador tiene 23 bits, el doble tiene 52.

Otros consejos

La memoria asignada para almacenar la variable de un tipo no es el único hecho para considerar la pérdida de datos. En general, la forma de RoundOff y cómo la CPU procesa los datos numéricos en caso de desbordamiento serían otros aspectos en los que desee considerar.

Porque el sizeof informa el mismo tamaño en la memoria no significa que haya pérdida de datos.

Considere 0.5.

Puede almacenar eso en un flotador pero no puede almacenarlo en un entero.

Por lo tanto, la pérdida de datos.

Es decir, quiero 0.5 de ese pastel. No puede representar eso como un entero. O no obtenga nada o muchos pasteles. Beque

¿Por qué entero? Porque es posible que solo necesite números enteros, por ejemplo, un ID_num

¿Por qué flotar? Porque es posible que necesite trabajar en números reales. % calculations

¿Por qué duplicar? Cuando tienes números reales que no pueden encajar en el tamaño flotante

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top