−0
计算机科学
表示法
以IEEE 754单精度浮点数表示负零
在对于整数的1+7比特的符号数值表示法中,负零是用二进制代码10000000表示的。在8位二进制反码中,负零是用二进制代码11111111表示,但补码表示法则没有负零的概念。在IEEE 754二进制浮点数算术标准中,指数和尾数为零、符号比特为一的数就是负零。
在IBM的普通十进制算数编码规范中,运用十进制来表示浮点数。这里负零被表示为指数为编码内任意合法数值、所有系数均为零、符号比特为一的数。
性质与处理
在编程语言中,例如C,C#,C++和Java,一个表达式的结果可能是负零(比如对一个负数算术下溢时的结果),此时负零和正零是等效的。因此一个简单的比较不能够确定一个数是负零。确定一个数是负零的办法包括:
使用IEEE 754中定义的copysign()函数复制零的符号到任意非零的数上。
用一个正数来除以这个零——得到的无穷能够反映出零的符号
在Java中,用Double类中的equals方法,能够分辨出正零和负零,例如:
在C语言中,使用一个依赖于本地硬件表示法的不方便的办法。例: *(int *)&var == 0x80000000(var在IEEE 754中编码单精度)。
其他对于负零的运算有:
− − -->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}
自然科学
在气象学中,处于统计学的原因,-0常常用来表示一个低于零度却又不足以约分成-1的温度(无论华氏温标还是摄氏温标),比如-0.2度,它不能被列为零度因为零度显然不会小于零。然而低于零度的天数往往是比较冬季寒冷程度的一个基本统计数据,所以它并不能被忽略。不过它又没有低到能够约分为-1度,所以就被记录为-0度。
在统计力学中,一个系统可能会有负的绝对温度,但是和直觉相反,这并不是极端寒冷,反而是极端炎热,比任何一个正的温度都要高(意指-0=无限)。在相关文献里,-0就是最高的温度。
参考资料
Floating point types.MSDNC#语言详述. [2005年10月15日]. (原始内容存档于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日]. — 一个包含有负零的“十进制”浮点数规范
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 函数的一个变化以适应负零
JScript data types.MSDNJScript. [2005年10月16日]. ——JScript的浮点数从定义上即包括负零
A look at the floating-point support of the Java virtual machine. Javaworld. [2005年10月16日]. ——Java虚拟机中负零的表示法
Bruce Dawson.Comparing floating point numbers. ——在比较浮点数时是怎么处理负零的
John Walker.Minus Zero. UNIVAC Memories. [2005年10月17日]. ——UNIVAC® 1100 系列电脑中的二进制反码
参见
0
数学
计算机科学
编程语言
免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。
- 有价值
- 一般般
- 没价值
{{item.userName}} 举报
{{item.time}} {{item.replyListShow ? '收起' : '展开'}}评论 {{curReplyId == item.id ? '取消回复' : '回复'}}