Введение
Различение положительного и отрицательного нуля.
Подписываемый ноль — это ноль, имеющий связанный с ним знак. В обычной арифметике число 0 не имеет знака, поэтому −0, +0 и 0 эквивалентны. Однако в вычислительной технике некоторые представления чисел допускают существование двух нулей, часто обозначаемых как −0 (отрицательный ноль) и +0 (положительный ноль), которые считаются равными при операциях числового сравнения, но могут вести себя по-разному в определенных операциях. Это происходит в системах с представлением чисел со знаком в виде знака и модуля, а также в дополнительном коде для целых чисел и в большинстве представлений чисел с плавающей точкой. Число 0 обычно кодируется как +0, но может быть представлено и как +0, −0 или 0. Стандарт IEEE 754 для арифметики с плавающей точкой (в настоящее время используемый большинством компьютеров и языков программирования, поддерживающих числа с плавающей точкой) требует наличия как +0, так и −0. Арифметика с использованием знаковых нулей может рассматриваться как вариант расширенной числовой прямой, где 1/−0 = −∞ и 1/+0 = +∞; деление не определено только для ±0/±0 и ±∞/±∞. Отрицательный ноль отражает концепцию математического анализа о приближении к 0 снизу как одностороннего предела, который может быть обозначен как x → 0−, x → 0− или x → ↑0. Обозначение "−0" может неформально использоваться для обозначения отрицательного числа, округленного до нуля. Концепция отрицательного нуля также имеет некоторые теоретические применения в статистической механике и других областях. Утверждается, что включение знакового нуля в IEEE 754 значительно упрощает достижение численной точности в некоторых критических задачах, особенно при вычислениях со сложными элементарными функциями. С другой стороны, концепция знакового нуля противоречит общепринятому в математике предположению о том, что отрицательный ноль равен нулю. Представления, допускающие отрицательный ноль, могут быть источником ошибок в программах, если разработчики программного обеспечения не учитывают, что, хотя оба представления нуля ведут себя одинаково при числовых сравнениях, они дают разные результаты в некоторых операциях.
Signed zero is zero with an associated sign. In ordinary arithmetic, the number 0 does not have a sign, so that −0, +0 and 0 are equivalent. However, in computing, some number representations allow for the existence of two zeros, often denoted by −0 (negative zero) and +0 (positive zero), regarded as equal by the numerical comparison operations but with possible different behaviors in particular operations. This occurs in the sign magnitude and ones' complement signed number representations for integers, and in most floating point number representations. The number 0 is usually encoded as +0, but can still be represented by +0, −0, or 0. The IEEE 754 standard for floating point arithmetic (presently used by most computers and programming languages that support floating point numbers) requires both +0 and −0. Real arithmetic with signed zeros can be considered a variant of the extended real number line such that 1/−0 = −∞ and 1/+0 = +∞; division is undefined only for ±0/±0 and ±∞/±∞. Negatively signed zero echoes the mathematical analysis concept of approaching 0 from below as a one sided limit, which may be denoted by x → 0−, x → 0−, or x → ↑0. The notation "−0" may be used informally to denote a negative number that has been rounded to zero. The concept of negative zero also has some theoretical applications in statistical mechanics and other disciplines. It is claimed that the inclusion of signed zero in IEEE 754 makes it much easier to achieve numerical accuracy in some critical problems, in particular when computing with complex elementary functions. On the other hand, the concept of signed zero runs contrary to the usual assumption made in mathematics that negative zero is the same value as zero. Representations that allow negative zero can be a source of errors in programs, if software developers do not take into account that while the two zero representations behave as equal under numeric comparisons, they yield different results in some operations.
Представительства
Форматы двоичных целых чисел могут использовать различные кодировки. В широко используемой кодировке дополнительного кода нуль не имеет знака. В представлении целых чисел со знаком и величиной в формате 1+7 бит отрицательный ноль представлен битовой строкой. В 8-битном представлении дополнительного кода отрицательный ноль представлен битовой строкой. Во всех этих трех кодировках положительный или беззнаковый ноль представлен. Тем не менее, последние два кодирования (с использованием знакового нуля) редко встречаются в целочисленных форматах. Наиболее распространенные форматы с использованием знакового нуля – это форматы чисел с плавающей точкой (форматы IEEE 754 или аналогичные), описанные ниже. В двоичных форматах чисел с плавающей точкой IEEE 754 нулевые значения представляются смещенным экспонентом и мантиссой, оба равные нулю. У отрицательного нуля знаковый бит установлен в единицу. Отрицательный ноль может быть получен в результате определенных вычислений, например, в результате арифметического переполнения при работе с отрицательным числом (возможны и другие результаты), или −1.0×0.0, или просто как −0.0. В десятичных форматах чисел с плавающей точкой IEEE 754 отрицательный ноль представляется экспонентой, являющейся любым допустимым значением в диапазоне для данного формата, мантиссой, равной нулю, и знаковым битом, установленным в единицу.
Свойства и обращение
Стандарт IEEE 754 для представления чисел с плавающей точкой определяет поведение положительного и отрицательного нуля при различных операциях. Исход может зависеть от текущих настроек режима округления IEEE.
Обозначение
В системах, включающих как знаковые, так и беззнаковые нули, обозначения +0 и -0 иногда используются для знаковых нулей.
В округленных значениях, таких как температура
Неформально можно использовать обозначение "−0" для отрицательного значения, округленного до нуля. Это обозначение может быть полезно, когда отрицательный знак имеет значение, например, при составлении таблиц температур по Цельсию, где отрицательный знак означает температуру ниже нуля.
В статистической механике
В статистической механике иногда используют отрицательные температуры для описания систем с инверсией населенностей, которые можно рассматривать как имеющие температуру, превышающую положительную бесконечность, поскольку коэффициент при энергии в функции распределения населенностей равен −1/температуре. В этом контексте температура −0 является (теоретической) температурой, большей, чем любая другая отрицательная температура, соответствующей (теоретической) максимально возможной степени инверсии населенностей, являющейся противоположным пределом значению +0.