为什么java longs max\u value< java会浮动max\u value,尽管是64位还是32位

gk7wooem  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(311)

正如标题所说,我不明白java的原始数据类型 long 最大值和最小值小于 float 的最大值和最小值。尽管 long 64位和 float 32位。
怎么回事?

9njqaruj

9njqaruj1#

原因是因为一个浮点使用浮点精度。long可以存储大量的精确数字,而i float可以存储较高的值,但其较低的位没有相同的精度。
从某种意义上说,浮点以科学/指数表示法存储值。因此,大值可以存储在少量位中。想想2 x10^200,这是一个巨大的数字,但可以存储在少量的位中。

kmpatx3s

kmpatx3s2#

32位 float 不仅仅是一个简单的数字,比如 long ; 它被分成了几块地。字段包括:
标志1位;
8位表示指数,为2的幂;
尾数是23位。
指数字段是经过编码的(通常,它只是实际指数的一个偏移量),但它表示从-126到127的指数(覆盖了256个可能值中的254个;尾数表示的值可以是从1到略低于2的值(实际上是2-2-23)。这意味着最大的可能 float 是2127x(2-2-23),或者几乎是2128,这比可能的最大值要大 long 值为263-1。
更多信息:
https://en.wikipedia.org/wiki/ieee_754
http://www.adambeneschan.com/how-does-floating-point-work/showfloat.php?floatvalue=340282346638528859811704183484516925440&floattype=float

相关问题