2009-10-17 35 views
7

已知在.NET中,long和double的大小都是8個字節。但是,double可以存儲比long更大的數字。考慮到double還需要存儲小數點後的數字數據,怎麼會這樣呢?問題的.NET中long和double的最大值與大小的關係

較短的版本:

Math.Pow(2,64)== long.MaxValue Math.Pow(2,64)< double.MaxValue

+0

double的精度小於小數。 – 2009-10-17 16:10:00

+0

http://en.wikipedia.org/wiki/Double_precision – 2009-10-17 16:13:09

+0

http://en.wikipedia.org/wiki/Floating_point#Range_of_floating-point_numbers – 2009-10-17 16:29:01

回答

17

短的答案雙僅存儲最重要的數字,而不是數字中的所有數字。例如如果您有長整數的double> max值,它將不會存儲小數點後的數字或小數點左側的任何數字。

對於所有的詳情,請參閱What every computer scientist should know about Floating-Point Arithmetic

+1

用足夠簡單的術語來解釋任何人的理解:) – Konstantin 2009-10-17 16:40:19

+0

我最初使用這段文字大約一年前,發現它真的很有幫助。 – LJM 2009-10-17 17:24:32

0

雙是浮點數字。如同二重奏存儲的數字變得越來越大,它變得越來越粗糙,最不重要的部分被駁回。

例如,當你有一個像1000億這樣的數字時,就是兩倍。 它可能正好是100億000或它可能是100 000 000 000 000 000 000 000 001

+0

雖然這沒有錯,但它沒有提到double爲什麼會比int或long更大的主要原因,即它是由有效數和指數表示的浮點數。 – 2009-10-17 16:38:06

1

基於整數的類型的整數範圍從-2 ^(n-1)2 ... 2 ^(n -1)-1(帶符號), 或0 ... 2^n-1(無符號)。

固定點變量與基於整數的類型相同,僅具有常數因子(例如,對於0.01:0.01 *(0 ... 2^n-1))。

任何語言的浮點變量(浮點型和雙精度型)都使用指數的幾位,其餘指數用於指數前的數字。它們不太準確(x + 1可能等於x,x是一個非常大的數字),但具有更大的範圍。

+1

順便說一句,「指數前的數字」被稱爲尾數或(更好)有效數字,請參閱http://en.wikipedia.org/wiki/Significand。 – 2009-10-17 16:36:05