?0
計算機(jī)科學(xué)
表示法
以IEEE 754單精度浮點數(shù)表示負(fù)零
在對于整數(shù)的1+7比特的符號數(shù)值表示法中,負(fù)零是用二進(jìn)制代碼10000000表示的。在8位二進(jìn)制反碼中,負(fù)零是用二進(jìn)制代碼11111111表示,但補(bǔ)碼表示法則沒有負(fù)零的概念。在IEEE 754二進(jìn)制浮點數(shù)算術(shù)標(biāo)準(zhǔn)中,指數(shù)和尾數(shù)為零、符號比特為一的數(shù)就是負(fù)零。
在IBM的普通十進(jìn)制算數(shù)編碼規(guī)范中,運用十進(jìn)制來表示浮點數(shù)。這里負(fù)零被表示為指數(shù)為編碼內(nèi)任意合法數(shù)值、所有系數(shù)均為零、符號比特為一的數(shù)。
性質(zhì)與處理
在編程語言中,例如C,C#,C++和Java,一個表達(dá)式的結(jié)果可能是負(fù)零(比如對一個負(fù)數(shù)算術(shù)下溢時的結(jié)果),此時負(fù)零和正零是等效的。因此一個簡單的比較不能夠確定一個數(shù)是負(fù)零。確定一個數(shù)是負(fù)零的辦法包括:
使用IEEE 754中定義的copysign()函數(shù)復(fù)制零的符號到任意非零的數(shù)上。
用一個正數(shù)來除以這個零——得到的無窮能夠反映出零的符號
在Java中,用Double類中的equals方法,能夠分辨出正零和負(fù)零,例如:
在C語言中,使用一個依賴于本地硬件表示法的不方便的辦法。例: *(int *)&var == 0x80000000(var在IEEE 754中編碼單精度)。
其他對于負(fù)零的運算有:
? ? -->0x=? ? -->0{\displaystyle {\frac {-0}{x}}=-0} (x>0)
? ? -->0x=+0{\displaystyle {\frac {-0}{x}}=+0} (x<0)
+0x=? ? -->0{\displaystyle {\frac {+0}{x}}=-0} (x<0)
? ? -->0+∞ ∞ -->=? ? -->0{\displaystyle {\frac {-0}{+\infty }}=-0}
? ? -->0? ? -->∞ ∞ -->=+0{\displaystyle {\frac {-0}{-\infty }}=+0}
+0? ? -->∞ ∞ -->=? ? -->0{\displaystyle {\frac {+0}{-\infty }}=-0}
(? ? -->0)? ? -->(? ? -->0)=+0{\displaystyle (-0)\cdot (-0)=+0}
(? ? -->0)? ? -->(+0)=? ? -->0{\displaystyle (-0)-(+0)=-0}
(? ? -->0)? ? -->(? ? -->0)=0{\displaystyle (-0)-(-0)=0}
(+0)+(? ? -->0)=0{\displaystyle (+0)+(-0)=0}
(? ? -->0)+(? ? -->0)=? ? -->0{\displaystyle (-0)+(-0)=-0}
x? ? -->(? ? -->0)=? ? -->0{\displaystyle x\cdot (-0)=-0} (x>0)
x+(? ? -->0)=x{\displaystyle x+(-0)=x}
自然科學(xué)
在氣象學(xué)中,處于統(tǒng)計學(xué)的原因,-0常常用來表示一個低于零度卻又不足以約分成-1的溫度(無論華氏溫標(biāo)還是攝氏溫標(biāo)),比如-0.2度,它不能被列為零度因為零度顯然不會小于零。然而低于零度的天數(shù)往往是比較冬季寒冷程度的一個基本統(tǒng)計數(shù)據(jù),所以它并不能被忽略。不過它又沒有低到能夠約分為-1度,所以就被記錄為-0度。
在統(tǒng)計力學(xué)中,一個系統(tǒng)可能會有負(fù)的絕對溫度,但是和直覺相反,這并不是極端寒冷,反而是極端炎熱,比任何一個正的溫度都要高(意指-0=無限)。在相關(guān)文獻(xiàn)里,-0就是最高的溫度。
參考資料
Floating point types.MSDNC#語言詳述. [2005年10月15日]. (原始內(nèi)容存檔于2006年8月24日).
Division operator.MSDNC#語言詳述. [2005年10月15日].
Thomas Wang.Java Floating-Point Number Intricacies. 20009月. 2000年3月.
Specification. General Decimal Arithmetic: Encoding Strawman 4d, version 0.96. [2005年10月16日]. — 一個包含有負(fù)零的“十進(jìn)制”浮點數(shù)規(guī)范
Kittel, Charles; and Herbert Kroemer. Thermal Physics. W. H. Freeman & Company. 1980. ISBN 0-7167-1088-9.
延伸閱讀
Michael Ingrassia.Fortran 95 SIGN Change. Sun Developer Network. [2005年10月15日]. ——Fortran語言中(Fortran 95)SIGN 函數(shù)的一個變化以適應(yīng)負(fù)零
JScript data types.MSDNJScript. [2005年10月16日]. ——JScript的浮點數(shù)從定義上即包括負(fù)零
A look at the floating-point support of the Java virtual machine. Javaworld. [2005年10月16日]. ——Java虛擬機(jī)中負(fù)零的表示法
Bruce Dawson.Comparing floating point numbers. ——在比較浮點數(shù)時是怎么處理負(fù)零的
John Walker.Minus Zero. UNIVAC Memories. [2005年10月17日]. ——UNIVAC? 1100 系列電腦中的二進(jìn)制反碼
參見
0
數(shù)學(xué)
計算機(jī)科學(xué)
編程語言
免責(zé)聲明:以上內(nèi)容版權(quán)歸原作者所有,如有侵犯您的原創(chuàng)版權(quán)請告知,我們將盡快刪除相關(guān)內(nèi)容。感謝每一位辛勤著寫的作者,感謝每一位的分享。
- 有價值
- 一般般
- 沒價值
{{item.userName}} 舉報
{{item.time}} {{item.replyListShow ? '收起' : '展開'}}評論 {{curReplyId == item.id ? '取消回復(fù)' : '回復(fù)'}}
{{_reply.userName}} 舉報
{{_reply.time}}