−0

−0负零代表0相反数,数学意义上等于0。

特定情况下,−0具有特殊意义:

计算机科学

表示法

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

在对于整数的1+7位元的符号数值表示法中,负零是用二进制代码10000000表示的。在8位元二进制反码中,负零是用二进制代码11111111表示,但二補數表示法則沒有負零的概念。在IEEE 754二进制浮点数算术标准中,指数和尾数为零、符号位元为一的数就是负零。

在IBM的普通十进制算数编码规范中,运用十进制来表示浮点数。这里负零被表示为指数为编码内任意合法数值、所有系数均为零、符号位元为一的数。

性质与处理

在编程语言,例如C、C#、C++Java,一个表达式的结果可能是负零(比如对一个负数算术下溢时的结果),此时负零和正零是等效的。因此一个简单的比较不能够确定一个数是负零。确定一个数是负零的办法包括:

  1. 使用IEEE 754中定义的copysign()函数复制零的符号到任意非零的数上。
  2. 用一个正数来除以这个零——得到的无穷能够反映出零的符号
    • x + 0 = + {\displaystyle {\frac {x}{+0}}=+\infty } (x>0)
    • x 0 = {\displaystyle {\frac {x}{-0}}=-\infty } (x>0)
  3. 在Java中,用Double类中的equals方法,能够分辨出正零和负零,[1]例如:
    • Double negativeZero = new Double(-0.0);
      negativeZero.equals(-0.0); // 结果:真
      negativeZero.equals( 0.0); // 结果:假
  4. 在C语言中,使用一个依赖于本地硬件表示法的不方便的办法。例: *(int *)&var == 0x80000000varIEEE 754中编码单精度)。

其他对于负零的运算有:

  • 0 x = 0 {\displaystyle {\frac {-0}{x}}=-0} (x>0)
  • 0 x = + 0 {\displaystyle {\frac {-0}{x}}=+0} (x<0)
  • + 0 x = 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就是最高的温度。[2]

参考资料

  1. ^ Double (Java Platform SE 6). docs.oracle.com. [2022-12-10]. (原始内容存档于2022-12-25). 
  2. ^ 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 系列电脑中的二进制反码

参见