pre*_*etk 5 java floating-point int
java 中和int类型float都是4 个字节。
那么如何在两者具有相同的有限字节数的情况下表示恰好到where hasint的范围呢?-2,147,483,6482,147,483,647float\xc2\xb13.40282347E+38F
根据我的理解,两者应该具有相同的范围,因为它们具有相同的字节数。有人可以解释一下如何float表示这么大的范围吗?
“浮动”点意味着您的号码小数部分的位数可以更改,以在考虑到其大小所规定的限制的情况下“尽可能地”表示您的号码。
我们暂时忘记float数据类型的 4 个字节,并假设您的“浮点”类型最多可以存储 10 位数字加上负号。这意味着您可以准确地表示从 :-9 999 999 999到 的数字+9 999 999 999。但是,如果您想要一位小数,则可以准确地表示从-999 999 999.9到 的数字+999 999 999.9。正如您所看到的,范围实际上已经发生了变化。
现在,让我们通过讨论有效数字和指数来正式解释一下:
假设您的“浮点”数据类型的有效数最多可以有 4 位数字,指数最多可以有 1 位数字,并且有效数和指数中都可以有减号。您将能够表示从-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 位表示有效数的符号)。
维基百科是一个很好的起点。通常,编程目的的主要收获是了解给定数据类型(您的“精度”)可以存储多少个十进制数字,因为这将决定哪种特定的十进制格式最适合您的目的。
有关详细信息,请参阅以下链接: https://en.wikipedia.org/wiki/Floating-point_arithmetic#IEEE_754 :_floating_point_in_modern_computers
请注意,理解二进制系统上浮点数的概念在信息技术中极其重要,因为即使是最简单的计算也会受到它的严重影响。
例如,计算机上表示的浮点(二进制)是编写以下内容的原因:
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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
会以违反直觉的方式输出something else,但如果您开始处理数字或将类型更改为浮动,它将产生正确的输出。
所以请注意:您需要完全理解这个概念。