正如标题所说,我不明白java的原始数据类型 long 最大值和最小值小于 float 的最大值和最小值。尽管 long 64位和 float 32位。怎么回事?
long
float
9njqaruj1#
原因是因为一个浮点使用浮点精度。long可以存储大量的精确数字,而i float可以存储较高的值,但其较低的位没有相同的精度。从某种意义上说,浮点以科学/指数表示法存储值。因此,大值可以存储在少量位中。想想2 x10^200,这是一个巨大的数字,但可以存储在少量的位中。
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_754http://www.adambeneschan.com/how-does-floating-point-work/showfloat.php?floatvalue=340282346638528859811704183484516925440&floattype=float
2条答案
按热度按时间9njqaruj1#
原因是因为一个浮点使用浮点精度。long可以存储大量的精确数字,而i float可以存储较高的值,但其较低的位没有相同的精度。
从某种意义上说,浮点以科学/指数表示法存储值。因此,大值可以存储在少量位中。想想2 x10^200,这是一个巨大的数字,但可以存储在少量的位中。
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