1 回答
TA贡献1802条经验 获得超10个赞
“浮动”点意味着您的数字的小数部分的位数可以更改以“尽可能最好地”表示您的数字,因为它的大小有限制。
让我们暂时忘记float数据类型的 4 个字节,并假设您的“浮点数”类型最多可以存储 10 位数字加上负号。-9 999 999 999
这意味着您可以准确地表示从 :到 的数字+9 999 999 999
。-999 999 999.9
但是,如果你想要一位小数,你可以准确地表示从到 的数字+999 999 999.9
。如您所见,范围已有效更改。
现在,让我们通过讨论有效数和指数来正式说明一下:
有效数字包含您的有效数字
指数表示 10 乘数的指数,或者,如果它更容易,则表示您必须将小数点移动多少个位置(0 刚好在第一个有效数字之前)。
假设您的“浮点数”数据类型的有效数最多可以有 4 位,指数也最多可以有 1 位,再加上significand和exponent中的减号。您将能够表示从-0.9 999 * 10^9 = -999900000
到 的数字+0.999 9 * 10^9 = +999900000
。正如您所看到的,虽然数字非常大,但您无法准确表示大多数大数字,因为您只有 4 位数字可用于表示。这种精度损失可以通过表示非常小的数字的能力来补偿,例如您可以表示0.999 9 * 10^-9 = 0.000 000 000 999 9
.
这解释了为什么尽管大小只有 4 个字节但范围如此之大,如您的问题所述。
为了完善您对此事的了解,请将上述概念转化为二进制(您的典型float
使用 4 位表示指数,23 位表示有效数,1 位表示有效数的符号)。
维基百科是一个很好的起点。通常,编程目的的主要收获是了解给定数据类型(您的“精度”)可以存储多少个小数位,因为这将决定哪种特定的小数格式最适合您的目的。
请注意,理解二进制系统中浮点数的概念在信息技术中非常重要,因为即使是最简单的计算也会受到它的严重影响。
在计算机(二进制)上表示的浮点数是例如编写如下内容的原因:
public class MyClass {
public static void main(String args[]) {
double x=0.1f;
double y=0.2f;
double z=0.3f;
if(x+y == z) {
System.out.println("something");
}
else {
System.out.println("something else");
}
}
}
将反直觉输出something else,但如果您开始玩数字或将类型更改为浮点数,它将产生正确的输出。
所以请注意:您需要完全理解这个概念。
添加回答
举报