为什么java longs MAX_VALUE< java浮动MAX_VALUE,尽管是64位对比32位

时间:2017-09-04 22:16:49

标签: java

就像标题所说,我不明白Java的原始数据类型long的最大值和最小值是如何小于float的最大值和最小值。尽管long为64位且float为32位。

发生了什么事?

2 个答案:

答案 0 :(得分:3)

原因是因为浮点使用浮点精度。 Long可以存储大量精确数字,而我可以存储一个较高的值,但在较低的位中没有相同的精度。

从某种意义上说,浮点数以科学/指数表示法存储值。因此,较大的值可以存储在少量的比特中。想想2 x10 ^ 200,这是一个很大的数字,但可以存储在少量的位中。

答案 1 :(得分:2)

32位float不仅仅是一个简单的数字,如long;它分解成了各个领域。字段是:

  • 1位用于标志;
  • 指数为8位,为2的幂;
  • 尾数23位。

指数字段被编码(通常,它只是与实数指数的偏移量),但它表示从-126到127的指数。(这涵盖了可能的256个值中的254个;另外两个用于特殊目的。 )尾数表示一个值,该值可以从1到略低于2的值(实际上是2 - 2 -23 )。这意味着最大可能float是2 127 x(2 - 2 -23 ),或几乎2 128 ,其中大于最大可能的long值,即2 63 -1。

更多信息:

https://en.wikipedia.org/wiki/IEEE_754

http://www.adambeneschan.com/How-Does-Floating-Point-Work/showfloat.php?floatvalue=340282346638528859811704183484516925440&floattype=float