为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

冉冉说 2023-06-04 16:51:24
和int类型在 java 中float都是4 个字节。那么如何int表示一个范围 just -2,147,483,648to 2,147,483,647where floathas approximately±3.40282347E+38F而两者都具有相同的有限字节数?根据我的理解,两者应该具有相同的范围,因为它们具有相同的字节数。有人可以解释一下如何float表示这么大的范围吗?
查看完整描述

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,但如果您开始玩数字或将类型更改为浮点数,它将产生正确的输出。


所以请注意:您需要完全理解这个概念。


查看完整回答
反对 回复 2023-06-04
  • 1 回答
  • 0 关注
  • 115 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信