我老师提出的问题是: 记下可能发生舍入错误的分配。 这是Java。
float f;
long l;
double d;
f = l;
d = l;
这就是答案,但为什么呢? float的值和最大值较高,float是浮点数。相比之下,长期只是全数,为什么会出现舍入错误?
答案 0 :(得分:5)
浮点数随着它们变大而在绝对值上变得不那么准确。超过某一点,最接近的两个可精确表示的浮点数之间的差异大于1.
或者反过来看一下,看看最近的float
表示到Long.MAX_VALUE
。现在查看距离float
最近的Long.MAX_VALUE - 1
表示...
除了其他任何内容之外,您应该能够计算出并非每个long
都只能通过数据类型的大小表示为float
:有2个 32 float
的{{1}}的可能位模式(并非所有都是正常数字)和long
的2 64 可能的位模式。
答案 1 :(得分:-1)
原因:浮动32位,长在java中是64位