精度损失 - int ->浮点数或双精度
2022-09-01 13:29:04
						我有一个正在复习的考试题目,题目是4分。
“在java中,我们可以将int分配给双精度或浮点数”。这会丢失信息吗,为什么?
我之所以这么说,是因为int通常是固定的长度或大小 - 存储数据的精度是有限的,其中在浮点中存储信息可能是无限的,本质上我们因此而丢失信息。
现在我对我是否在这里击中了正确的区域有点粗略。我非常确定它会失去精确度,但我不能完全把我的手指放在为什么。我能得到一些帮助吗?
我有一个正在复习的考试题目,题目是4分。
“在java中,我们可以将int分配给双精度或浮点数”。这会丢失信息吗,为什么?
我之所以这么说,是因为int通常是固定的长度或大小 - 存储数据的精度是有限的,其中在浮点中存储信息可能是无限的,本质上我们因此而丢失信息。
现在我对我是否在这里击中了正确的区域有点粗略。我非常确定它会失去精确度,但我不能完全把我的手指放在为什么。我能得到一些帮助吗?
在 Java 中,Integer 使用 32 位来表示其值。
在Java中,FLOAT使用23位尾数,因此大于2 ^ 23的整数将被截断其最低有效位。例如,33554435(或0x200003)将被截断到大约 33554432 +/- 4
在Java中,DOUBLE使用52位尾数,因此能够表示32位整数而不会丢失数据。
另见维基百科上的“浮点”
没有必要知道浮点数的内部布局。您所需要的只是鸽子洞原理和知识,并且大小相同。intfloat
int是一种 32 位类型,其每个位模式表示一个不同的整数,因此有 2^32 个值。intfloat是 32 位类型,因此它最多有 2^32 个不同的值。floatfloatintfloat类似的推理可以与 和 一起使用。longdouble
 
				    		 
				    		 
				    		 
				    		