−0 (number)

From Wikipedia, the free encyclopedia

−0 is the representation of negative zero or minus zero, a number that exists in computing, in some signed number representations for integers, and in most floating point number representations. In mathematical terms there is no concept of a negative (or positive) zero, and −0 is identical to, and represented as, 0. In science, −0 may be used to denote a quantity which is less than zero, but which is too small in magnitude to be rounded down to −1. In statistical mechanics, certain systems in a state of population inversion may be considered to have an absolute temperature of −0.

Contents

[edit] Representations

In a 1+7-bit sign-and-magnitude representation for integers, negative zero is represented by the binary value 10000000. In an 8-bit one's complement representation, negative zero is represented by the binary value 11111111. In IEEE 754 floating point numbers, negative zero is represented by the exponent and mantissa being zero and the sign bit being one.

In IBM's General Decimal Arithmetic encoding specification, a floating point representation that uses decimal arithmetic, negative zero is represented by an exponent being any valid exponent in the range for the encoding, the coefficient being (densely packed encoded) all zeros, and the sign bit being one.

[edit] Properties and handling

In programming languages such as C, C#, C++, and Java, whilst it is possible to obtain negative zero as the result of an expression (for instance as the result of arithmetic underflow on a negative number), negative zero and positive zero compare equal. Thus a simple comparison is not sufficient to test whether a number is negative zero. Ways of testing include

  • using the copysign() function defined by IEEE 754 to copy the sign of the zero to some non-zero number
  • dividing the number into a positive number—the resulting Infinity will reflect the sign of the zero.
    • \frac{x}{+0} = +\infty (for positive x)
    • \frac{x}{-0} = -\infty (for positive x)
  • in Java, using the equals method in the Double class, which treats negative zero as distinct from positive zero; for example, Double negativeZero = new Double(-0.0); negativeZero.equals(-0.0); // Result: true
    negativeZero.equals( 0.0); // Result: false
  • in C, using a non-portable technique that relies on local hardware representation, e.g., *(int *)&var == 0x80000000 (where var is encoded in IEEE 754 single precision)


Other operations involving negative zero:

  • \frac{-0}{x} = -0 (for positive x)
  • \frac{-0}{x} = +0 (for negative x)
  • \frac{+0}{x} = -0 (for negative x)
  • \frac{-0}{+\infty} = -0
  • \frac{-0}{-\infty} = +0
  • \frac{+0}{-\infty} = -0
  • (-0) \cdot (-0) = +0
  • ( − 0) − ( + 0) = − 0
  • ( − 0) − ( − 0) = + 0
  • ( + 0) + ( − 0) = + 0
  • ( − 0) + ( − 0) = − 0
  • x \cdot (-0) = -0 (for positive x)
  • x + ( − 0) = x

[edit] Scientific uses

In meteorology, −0 can be used to indicate a temperature which is below zero (Fahrenheit or Celsius, depending on which scale is in use), which is often important for statistical reasons, but is not low enough to be rounded to −1. An example of such a temperature is −0.2 degrees; this cannot be listed as zero degrees, because temperatures of zero degrees are obviously not considered below zero. However, a tally of below-zero days is often a rudimentary statistic in comparing the coldness of winter seasons, so it cannot be ignored. It is not low enough to be rounded to −1, so it is recorded as −0.

In some contexts related to statistical mechanics, it is possible for systems to have a negative absolute temperature, but counterintuitively, these are not extremely cold, but rather extremely hot, hotter than any positive temperature. In this context, −0 is the hottest temperature there is.

[edit] References

[edit] Further reading