−0
特定情況下,−0具有特殊意義:
- 在計算機科學中,−0是浮點數中表達0的一種方式,可以在某些時候進行符號性處理。
- 在普通應用中,−0有可能被用來表示一個可以四捨五入為零的負數,或者是一個從負方向上趨近於零的數。
- 在統計力學中,特定的系統在反轉分布的狀態下,可以被認為擁有−0的絕對溫度。
計算機科學
表示法
在對於整數的1+7位元的符號數值表示法中,負零是用二進制代碼10000000表示的。在8位元二進制反碼中,負零是用二進制代碼11111111表示,但二補數表示法則沒有負零的概念。在IEEE 754二進制浮點數算術標準中,指數和尾數為零、符號位元為一的數就是負零。
在IBM的普通十進制算數編碼規範中,運用十進制來表示浮點數。這裡負零被表示為指數為編碼內任意合法數值、所有係數均為零、符號位元為一的數。
性質與處理
在編程語言,例如C、C#、C++和Java,一個表達式的結果可能是負零(比如對一個負數算術下溢時的結果),此時負零和正零是等效的。因此一個簡單的比較不能夠確定一個數是負零。確定一個數是負零的辦法包括:
- 使用IEEE 754中定義的
copysign()
函數複製零的符號到任意非零的數上。 - 用一個正數來除以這個零——得到的無窮能夠反映出零的符號
- (x>0)
- (x>0)
- 在Java中,用
Double
類中的equals方法,能夠分辨出正零和負零,[1]例如:- Double negativeZero = new Double(-0.0);
negativeZero.equals(-0.0); // 結果:真
negativeZero.equals( 0.0); // 結果:假
- Double negativeZero = new Double(-0.0);
- 在C語言中,使用一個依賴於本地硬件表示法的不方便的辦法。例:
*(int *)&var == 0x80000000
(var在IEEE 754中編碼單精度)。
其他對於負零的運算有:
- (x>0)
- (x<0)
- (x<0)
- (x>0)
自然科學
在氣象學中,處於統計學的原因,−0常常用來表示一個低於零度卻又不足以約分成-1的溫度(無論華氏溫標還是攝氏溫標),比如−0.2度,它不能被列為零度因為零度顯然不會小於零。然而低於零度的天數往往是比較冬季寒冷程度的一個基本統計數據,所以它並不能被忽略。不過它又沒有低到能夠約分為-1度,所以就被記錄為−0度。[來源請求]
在統計力學中,一個系統可能會有負的絕對溫度,但是和直覺相反,這並不是極端寒冷,反而是極端炎熱,比任何一個正的溫度都要高(意指−0=無限)。在相關文獻裡,−0就是最高的溫度。[2]
參考資料
- ^ Double (Java Platform SE 6). docs.oracle.com. [2022-12-10]. (原始內容存檔於2022-12-25).
- ^ Kittel, Charles; Kroemer, Herbert. Thermal Physics. W. H. Freeman & Company. 1980. ISBN 0-7167-1088-9.
- Floating point types. MSDN C#語言詳述. [2005年10月15日]. (原始內容存檔於2006年8月24日).
- Division operator. MSDN C#語言詳述. [2005年10月15日]. (原始內容存檔於2005年11月21日).
- Thomas Wang. Java Floating-Point Number Intricacies. 2000年3月 [2007-07-07]. (原始內容存檔於2005-09-21).
- Specification. General Decimal Arithmetic: Encoding Strawman 4d, version 0.96. [2005年10月16日]. (原始內容存檔於2012年2月17日). — 一個包含有負零的「十進制」浮點數規範
延伸閱讀
- Michael Ingrassia. Fortran 95 SIGN Change. Sun Developer Network. [2005年10月15日]. (原始內容存檔於2012年2月17日).——Fortran語言中(Fortran 95)
SIGN
函數的一個變化以適應負零 - JScript data types. MSDN JScript. [2005年10月16日]. (原始內容存檔於2005年11月10日).——JScript的浮點數從定義上即包括負零
- A look at the floating-point support of the Java virtual machine. Javaworld. [2005年10月16日]. (原始內容存檔於2012年2月17日).——Java虛擬機中負零的表示法
- Bruce Dawson. Comparing floating point numbers. [2007-07-07]. (原始內容存檔於2007-07-03).——在比較浮點數時是怎麼處理負零的
- John Walker. Minus Zero. UNIVAC Memories. [2005年10月17日]. (原始內容存檔於2012年2月17日).——UNIVAC® 1100 系列電腦中的二進制反碼