stringtranslate.com

Знаковый ноль

Знаковый ноль — это ноль с соответствующим знаком . В обычной арифметике число 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 значительно облегчает достижение числовой точности в некоторых критических задачах, [1], в частности, при вычислениях со сложными элементарными функциями. [2] С другой стороны, концепция знакового нуля противоречит обычному предположению, сделанному в математике, что отрицательный ноль — это то же самое значение, что и ноль. Представления, допускающие отрицательный нуль, могут быть источником ошибок в программах, если разработчики программного обеспечения не учитывают, что, хотя два представления нуля ведут себя как равные при числовом сравнении, в некоторых операциях они дают разные результаты.

Представительства

Двоичные целочисленные форматы могут использовать различные кодировки . В широко используемой кодировке с двоичным дополнением ноль не имеет знака. В 1+7-битном представлении знака и величины целых чисел отрицательный ноль представлен битовой строкой 1000 0000 . В 8-битном представлении с дополнением единиц отрицательный ноль представлен битовой строкой 1111 1111 . Во всех этих трех кодировках положительный или беззнаковый ноль представлен 0000 0000 . Однако последние две кодировки (с нулем со знаком) нетипичны для целочисленных форматов. Наиболее распространенными форматами со знаком нуля являются форматы с плавающей запятой ( форматы IEEE 754 или аналогичные), описанные ниже.

Отрицательный ноль по представлению IEEE 754 в двоичном формате32

В двоичных форматах с плавающей запятой IEEE 754 нулевые значения представлены смещенной экспонентой, а мантисса равна нулю. Отрицательный ноль имеет знаковый бит, равный единице. Отрицательный ноль можно получить в результате определенных вычислений, например, в результате арифметического опустошения отрицательного числа (возможны и другие результаты), или −1.0×0.0, или просто как −0.0.

В десятичных форматах с плавающей запятой IEEE 754 отрицательный ноль представлен экспонентой, представляющей собой любую допустимую экспоненту в диапазоне для формата, истинная мантисса равна нулю, а знаковый бит равен единице.

Свойства и обработка

Стандарт IEEE 754 с плавающей запятой определяет поведение положительного и отрицательного нуля при различных операциях. Результат может зависеть от текущих настроек режима округления IEEE .

Обозначения

В системах, которые включают как знаковые, так и беззнаковые нули, для знаковых нулей иногда используется обозначение и .

Арифметика

Сложение и умножение коммутативны, но необходимо соблюдать некоторые специальные правила, а это означает, что обычные математические правила алгебраического упрощения могут быть неприменимы. Знак ниже показывает полученные результаты с плавающей запятой (это не обычный оператор равенства).

При умножении или делении всегда соблюдается обычное правило знаков:

Существуют специальные правила сложения или вычитания знакового нуля:

Из-за отрицательного нуля (а также когда режим округления вверх или вниз) выражения −( xy ) и (− x ) − (− y ) для переменных с плавающей запятой x и y не могут быть заменены на y. - х . Однако (-0) + x можно заменить на x с округлением до ближайшего значения (кроме случаев, когда x может быть сигнальным NaN ).

Еще несколько особых правил:

Деление ненулевого числа на ноль устанавливает флаг деления на ноль , а операция, создающая NaN, устанавливает флаг недопустимой операции. Обработчик исключений вызывается, если включен соответствующий флаг.

Сравнения

Согласно стандарту IEEE 754, отрицательный ноль и положительный ноль должны сравниваться как равные с обычными (числовыми) операторами сравнения, такими как ==операторы C и Java . В этих языках могут потребоваться специальные приемы программирования, чтобы различать два значения:

Примечание. Приведение к целочисленному типу не всегда работает, особенно в системах с двойным дополнением.

Однако некоторые языки программирования могут предоставлять альтернативные операторы сравнения, которые различают два нуля. Так обстоит дело, например, с методом Equals в Double классе-оболочке Java . [4]

В округленных значениях, таких как температура

Неформально можно использовать обозначение «-0» для отрицательного значения, округленного до нуля. Это обозначение может быть полезно, когда отрицательный знак имеет значение; например, при составлении таблицы температур по Цельсию , где отрицательный знак означает температуру ниже нуля .

В статистической механике

В статистической механике иногда используются отрицательные температуры для описания систем с инверсной населенностью , которые, как можно считать, имеют температуру больше положительной бесконечности, поскольку коэффициент энергии в функции распределения населенностей равен -1/Температура. В этом контексте температура -0 представляет собой (теоретическую) температуру, большую, чем любая другая отрицательная температура, что соответствует (теоретической) максимально возможной степени инверсии населенности, противоположному экстремуму +0. [5]

Смотрите также

Рекомендации

  1. ^ Уильям Кахан , «Разрезы для сложных элементарных функций, или Много шума из-за ничтожного знакового бита», в «Современном состоянии численного анализа» (редакторы Изерлза и Пауэлла), Clarendon Press, Оксфорд, 1987.
  2. ^ Уильям Кахан , Производные в комплексной z-плоскости, с. 10.
  3. Коулишоу, Майк (7 апреля 2009 г.). «Десятичная арифметика: арифметические операции – извлечение квадратного корня». speleotrove.com ( корпорация IBM ) . Проверено 7 декабря 2010 г.
  4. ^ «Двойник». Платформа Java™, стандартная версия 6, спецификация API . Справочный центр Oracle. Архивировано из оригинала 4 августа 2009 г.
  5. ^ Киттель, Чарльз и Герберт Кремер (1980). Теплофизика (2-е изд.) . WH Фриман и компания . п. 462. ИСБН 0-7167-1088-9.

дальнейшее чтение