猿问

4字节(±3.40282347E + 38)的浮点范围如何

int类型在 java 中float都是4 个字节

那么如何int表示一个范围 just -2,147,483,648to 2,147,483,647where floathas approximately±3.40282347E+38F而两者都具有相同的有限字节数?

根据我的理解,两者应该具有相同的范围,因为它们具有相同的字节数。有人可以解释一下如何float表示这么大的范围吗?


冉冉说
浏览 199回答 1
1回答

守候你守候我

“浮动”点意味着您的数字的小数部分的位数可以更改以“尽可能最好地”表示您的数字,因为它的大小有限制。让我们暂时忘记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,但如果您开始玩数字或将类型更改为浮点数,它将产生正确的输出。所以请注意:您需要完全理解这个概念。
随时随地看视频慕课网APP

相关分类

Java
我要回答