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. ^ http://java.sun.com/javase/6/docs/api/java/lang/Double.html#equals(java.lang.Object)
  5. ^ Киттель, Чарльз и Герберт Кремер (1980). Теплофизика (2-е изд.) . WH Фриман и компания . п. 462. ИСБН 0-7167-1088-9.

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