2015-02-06 31 views
1

目前我正在學習Java,在我的書裏寫了一兩倍的範圍的大小從〜4,94E-324〜1,798E + 308Java和雙

我有一些問題到:如何可以加倍然後是零(0)? 像雙d = 0; 爲什麼雙倍沒有範圍包括零時可能?爲什麼缺少負數?我在這裏忘了什麼嗎?謝謝你的幫助!

真誠, 馬克西

+1

雙值*可*爲負數。我懷疑這本書談論的是幅度的範圍(也可能是0)。 – 2015-02-06 19:22:31

+0

我知道double值可能是負值。本書正在討論雙倍範圍(DOUBLE.MIN_VALUE和DOUBLE.MAX_VALUE)。那麼爲什麼MIN_VALUE高於0? – Maxbit 2015-02-06 19:23:42

+2

因爲'Double.MIN_VALUE'是基本上大於0的最小值 - 類型的epsilon。真的不太清楚你在問什麼... – 2015-02-06 19:24:32

回答

1

我想你解釋的範圍在數學意義上。你的書的範圍意味着有限的數量是多少,有限的數量有多少,可以產生負值和正值。所以基本上它有多大的接近0以及有限的值可以接近無限。數學意義上的Double的實際範圍類似-1.7*10^3081.7*10^308

Double類的成員包含Min和Max值。看看Min_VALUEMax_VALUE會員Double。真的數學範圍是你的書([-Double.MAX_VALUE, Double.MAX_VALUE])的範圍的副產品,這是多少精確度Double可以容納的結果。

+0

Ahhhh,這就是我的意思!謝謝!但你怎麼知道數學意義上的範圍?你可以計算它還是隻是一個定義的東西? – Maxbit 2015-02-06 19:31:13

+0

Double類具有包含最小值和最大值的成員。查看'Min_VALUE'和'Max_VALUE'成員的'Double'。實際上,數學範圍是書中範圍的副產品,這是Double'可以保持多少精確度的結果。 – HavelTheGreat 2015-02-06 19:38:46

+0

但正如user2864740所說,它們被命名爲confusingly(至少DOUBLE.MIN_VALUE)。但是,謝謝! – Maxbit 2015-02-06 19:39:27

1

大多數編程語言中的雙精度浮點數比這更復雜。您可以通過查找浮點數的標準IEEE 754來找到更爲技術性的解釋。

基本上,浮點數(在java中,變量類型floatdouble)以科學記數法有效存儲,帶有符號,尾數和指數。 (指數的基數始終爲2)。如何將其轉換爲二進制格式有點複雜,但需要了解的重要部分是數字有效地存儲爲+/- mantissa * 2^exponent

然而,尾數和指數都有固定的範圍。你的教科書正在談論的是基於指數範圍的可能值的範圍。也就是說,如果您選擇最大或最小可能的指數,忽略價值的符號,值可能有多大或多小。對於這種情況,零也被忽略,因爲在科學記數法中,零是一個微不足道的情況,它沒有說明指數的可用範圍。

雙打有15-16位數的精度,也就是說,無論指數如何,您都可以用尾數爲15-16位的數字表示數字。不管尾數如何,您可以表示的數字範圍從約10^-324到約10^308。無論尾數和指數如何,您都可以表示正數和負數。