0

我试图了解投射何时会导致数据丢失以及它是如何工作的。因此,对于以下示例,我尝试了解是否存在数据丢失,如果是,为什么:(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

仅将答案基于类型大小就足够了吗?(+ round )

4

4 回答 4

3

假设 32 位整数和正常的 4 和 8 字节 IEEE-754 浮点数/双精度数将是:

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)

注意 int 有 32 位精度,float 有 23 位,double 有 52 位。

于 2013-11-08T06:18:13.660 回答
1

分配给存储类型变量的内存并不是您考虑数据丢失的唯一事实。通常,四舍五入的方式以及 CPU 如何在溢出的情况下处理数字数据将是您可能想要研究的其他方面。

于 2013-11-08T06:21:35.203 回答
0

为什么是整数?因为您可能只需要整数,例如ID_num

为什么漂浮?因为您可能需要处理实数示例% calculations

为什么加倍?当您有不适合浮点大小的实数时

于 2013-11-08T06:23:45.460 回答
0

因为sizeof内存中的报告大小相同并不意味着有数据丢失。

考虑 0.5。

可以将其存储在浮点数中,但不能将其存储在整数中。

因此数据丢失。

即我想要那个蛋糕的 0.5 个。不能将其表示为整数。要么一无所获,要么得到很多蛋糕。百胜

于 2013-11-08T06:18:34.880 回答