-0

求聞百科,共筆求聞

-0負零代表0相反數,等於0。特定情況下,-0可能具有特殊意義。 在計算機科學中,-0主要用來表達浮點數,以及在某些時候對整數進行有符號數處理

在普通應用中,-0有可能被用來表示一個可以四捨五入為零的負數,或者是一個從負方向上趨近於零的數。

統計力學中,特定的系統在反轉分佈的狀態下,可以被認為擁有-0的絕對溫度

計算機科學

表示法

IEEE 754單精度浮點數表示負零

在對於整數的1+7位元的符號數值表示法中,負零是用二進制代碼10000000表示的。在8位元二進制反碼中,負零是用二進制代碼11111111表示,但二補數表示法則沒有負零的概念。在IEEE 754二進制浮點數算術標準中,指數和尾數為零、符號位元為一的數就是負零。

IBM的普通十進制算數編碼規範中,運用十進制來表示浮點數。這裏負零被表示為指數為編碼內任意合法數值、所有係數均為零、符號位元為一的數。

性質與處理

在程式語言,例如CC#C++Java,一個表達式的結果可能是負零(比如對一個負數算術下溢時的結果),此時負零和正零是等效的。因此一個簡單的比較不能夠確定一個數是負零。確定一個數是負零的辦法包括:

  1. 使用IEEE 754中定義的copysign()函數複製零的符號到任意非零的數上。
  2. 用一個正數來除以這個零——得到的無窮能夠反映出零的符號
    • (x>0)
    • (x>0)
  3. 在Java中,用Double中的equals方法,能夠分辨出正零和負零,例如:
    • Double negativeZero = new Double(-0.0);
      negativeZero.equals(-0.0); // 結果:真
      negativeZero.equals( 0.0); // 結果:假
  4. 在C語言中,使用一個依賴於本地硬件表示法的不方便的辦法。例: *(int *)&var == 0x80000000varIEEE 754中編碼單精度)。

其他對於負零的運算有:

  • (x>0)
  • (x<0)
  • (x<0)
  • (x>0)

自然科學

氣象學中,處於統計學的原因,-0常常用來表示一個低於零度卻又不足以約分成-1的溫度(無論華氏溫標還是攝氏溫標),比如-0.2度,它不能被列為零度因為零度顯然不會小於零。然而低於零度的天數往往是比較冬季寒冷程度的一個基本統計數據,所以它並不能被忽略。不過它又沒有低到能夠約分為-1度,所以就被記錄為-0度。

統計力學中,一個系統可能會有負的絕對溫度,但是和直覺相反,這並不是極端寒冷,反而是極端炎熱,比任何一個正的溫度都要高(意指-0=無限)。在相關文獻裏,-0就是最高的溫度。

參考資料

延伸閱讀

參見