我老师的问题是:写下可能但可能出现舍入错误的作业。这是在 Java 中。
float f;
long l;
double d;
f = l;
d = l;
这就是答案,但为什么呢?float 的值和最大值较高,float 是一个浮点数。相比之下,long 只是完整的数字,那么为什么会有舍入错误?
随着浮点数变大,浮点数的绝对值变得不那么准确。超过某个点,最接近的两个可精确表示的浮点数之间的差值大于 1。
或者反过来看,看最接近的float
表示Long.MAX_VALUE
。现在看看float
最接近Long.MAX_VALUE - 1
...
除了其他任何事情之外,您应该能够计算出并非每个都long
可以float
仅通过数据类型的大小来表示:有 2 32 个可能的位模式float
(并非所有这些都是正常数字)和 2 64 个可能的位模式为long
.
原因:浮点32位,长在java中是64位