2013-08-21 74 views
0

我覺得這應該很容易在網上找到,但我很難。Double.Epsilon Value

有沒有人知道c#值是什麼Double.Epsilon?我正在尋找確切的數值。

+7

你是怎麼研究的?我在LINQPad中獲得'4.94065645841247E-324' – Rotem

+4

「1.7976931348623157E + 308」這個相當大的數字:)我不認爲它是最小的雙倍:D – wudzik

+3

MSDN鏈接:['Double.Epsilon'](http:// msdn .microsoft.com/en-us/library/system.double.epsilon.aspx) – Kobi

回答

6

這裏是它的聲明:

[__DynamicallyInvokable] 
public const double Epsilon = 4.94065645841247E-324; 
1

沒有,這肯定是不正確的。

第一:Double.Epsilon值可以容易地由任一一個小程序或者通過讀取被發現了documentation

4.94065645841247E-324 

第二:不要Machine Epsilon其通常在比較之間使用混淆此值兩個雙重價值。有關「Machine Epsilon」的更多詳細信息,請參閱this question

1

MSDN page

此常數的值是4.94065645841247e-324。

0

這些答案都不是確切的數值。確切的值是2的冪,即2^-1074,因爲這是IEEE浮點數實際存儲在現代計算機中的方式。所有其他答案都是十進制近似值。如果將該十進制近似值分配給double,則它將舍入爲2^-1074,因此在內部寄存器或存儲單元將收到真正的「Epsilon」值。所以,使用十進制常量初始化一個存儲位置到最小浮點值的作用,但十進制常量仍然是而不是這個最小浮點值的實際值。

說明:寫在IEEE符號的最小正數值是

0.0000000000000000000000000000000000000000000000000001B×2^-1022。

(在B爲二進制基)

這是一個1移位52位在二進制點的右側,然後移位另一個1022個比特,總共1074個比特。前導符號位爲零。符號位(1位)加上係數(52位)加指數(11位)給出64位存儲。

還要注意這是一個「非規格化」浮點值,因爲指數是-1022。

請參閱https://en.wikipedia.org/wiki/IEEE_floating_point並搜索「1074」。

ps。我的計算器可以更精確地表示Double.Epsilon = 2^-1074的值,如4.9406564584124654417656879286822e-324。

相關問題