2010-09-14 637 views
7

在C++中,例如fmod(-2,2)返回-0。表達式-0 == 0是正確的,但是位是不同的。有什麼目的像-0這應該是0但代表不同?在任何計算中,-00的使用方式完全相同嗎?-0和0有什麼區別?

+2

我相信1/0是正無窮大,1/-0是負無窮大。除此之外,我不知道。 – 2010-09-14 09:11:17

+3

我不確定-0和0之間的差異是-0還是0. – 2010-09-14 09:46:57

回答

13

不,+0-0在每次計算中都不以相同方式使用。例如:

3·(+0) = +0 
+0/-3 = -0 

我建議你由大衛戈德堡,這揭示了爲什麼+0 -0需要和浮點運算,以及他們不同的方式輕閱讀What Every Computer Scientist Should Know About Floating-point arithmetic。在+0廣告-0有何不同(以及爲什麼可以用複雜的值打交道時非常有用)

的例子可以在Kahan的,W. 1987年削減分行復雜初等函數可以發現,「在數字藝術的國家分析「(我無法找到這篇文章的pdf,你可能會在你當地的大學圖書館找到一篇pdf)。

+0

鏈接以一種很好的方式解釋它! – Danvil 2010-09-14 09:36:07

3

IEEE標準754允許+0和-0。相同的尾數,不同的符號。它們在計算中應該是一樣的。

+1

除了它們不同時,例如'1/x'。 – 2010-09-14 15:00:51

+0

好的,不同的。我不會經常被零分,所以請原諒我。 – alxx 2010-09-17 06:28:49

10

Signed Zero維基百科頁面將回答大部分這些問題:

符號零零是具有關聯 跡象。在通常的算術中,-0 = 0.然而,在計算中,一些數字允許存在兩個零,通常由-0(負零)和+0(正零和)表示爲 。這發生在一些有整數的 數字表示, 以及大多數浮點數 表示中。數字0是 ,通常編碼爲+0,但它可以用+0或-0表示。

的IEEE 754標準浮動 浮點運算(目前使用的 大多數計算機和編程語言 支持浮點 號)同時需要+0和-0。可以將0/0作爲變量 作爲擴展實數行 ,其中1/-0 =-∞和1/+ 0 = +∞,除數 的零僅在±0 /±0處未定義。

據稱,它的 列入IEEE 754符號零

(...)使得它更容易 與複雜 基本運算時實現數值精度 在一些關鍵問題,特別是 功能。

-3

我認爲負號是由fmod(mis?)實現引起的,其中符號位被明確處理並在處理結束時附加回結果。

+0

我愛沒有評論downvotes – YeenFei 2010-09-14 09:23:26

+3

-1錯誤的答案 – Tomas 2010-09-14 10:26:58

+0

@Tomas,建設性的答覆。 – YeenFei 2010-09-15 00:47:00

相關問題