2017-09-04 32 views
-1

就像標題所說,我不明白Java的原始數據類型long最大值和最小值是如何小於float的最大值和最小值。儘管long是64位,而float是32位。怎麼java延長MAX_VALUE <JAVA浮動MAX_VALUE儘管是64位與32位

這是怎麼回事?

+0

看看[此](https://stackoverflow.com/questions/15004944/max-value-of-integer)。這不是一個直接的答案,但它包含了確切的解釋。 – campovski

回答

3

原因是因爲float使用浮點精度。一個Long可以存儲大量的精確數字,而I float可以存儲一個較高的值,但是它的較低位中沒有相同的精度。

從某種意義上講,浮點數以科學/指數表示法存儲值。因此可以將較大的值存儲在少量的位中。認爲2 x10^200,這是個龐大的數字,但可以存儲在少量的位中。

2

一個32位的float不只是一個簡單的數字,就像一個long;它被分解成田地。字段爲:

  • 1位爲符號;
  • 8位指數,它是2的冪;
  • 23位爲尾數。

指數字段被編碼(通常,它只是從真實指數的偏移量),但它代表從-126到127的指數(即覆蓋可能的256個值的254;另外兩個用於特殊目的)。尾數表示值可以從1到一個剛好低於2的值(實際上是2 - 2 -23)。這意味着,最大的可能是 X(2 - 2 -23),或幾乎2 ,這是比最大可能long值,它是2 -1大。

的更多信息:

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

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