2011-06-25 62 views
26

例如,在:爲什麼double.Parse忽略零的符號?

bool eq = (1/double.Parse("-0.0")) == (1/-0.0); 

eqfalse

double.Parse將不得不經過一些麻煩來顯式忽略零符號,即使不這樣做,幾乎從不會導致問題。 因爲我需要原始表示,所以我不得不編寫自己的解析函數,該函數特殊情況爲負零並且使用double.Parse表示其他所有情況。

這並不是一個大問題,但我真的好奇他們爲什麼會做出忽略零標記的決定,因爲在我看來,不這樣做並不是壞事。

+0

爲什麼你需要零的符號?畢竟,IEEE 754聲稱「+0 == -0」。 –

+0

你的代碼示例如何不拋出DivideByZeroException? – FishBasketGordo

+0

@Donal:因爲我需要以字節爲單位的原始表示,而且它不同。 @FishBasketGordo:因爲IEEE 754浮點除零是合法的並且定義明確。 – harold

回答

2

我不知道爲什麼本身,但一個潛在的解決方案:如果你在開頭看到一個-字符,解析字符串的其餘部分,然後否定它。

+0

當然,它試圖改變'(1/-0.0)'到'(1/0.0)' - 結果將是'真的' 您是否想過NaN? – harold

+0

@harold:奇怪,不,我認爲它對無限無效。 (沒有意義。)但是,你是對的,謝謝。 – Mehrdad

+0

+∞在任何現代數學解釋中都不等於-∞... –

-3

有區別:

  1. double.Parse( 「 - 0.0」)= 0,1/0 - > INF

  2. 1/-0.0 - > -INF

但是語句2中的負運算符並不意味着「-0.0」。