Jump to content

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

(Перенаправлено с отрицательного нуля )

Знаковый ноль — это ноль с соответствующим знаком . В обычной арифметике число 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 .

Обозначения

[ редактировать ]

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

Арифметика

[ редактировать ]

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

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

  • (для отличается от ±∞)
  • (для отличается от 0)

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

  • (для отличается от 0)
  • (для любого конечного , −0 при округлении в отрицательную сторону)

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

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

  • [3]
  • (следует правилу знаков деления)
  • (для ненулевого , следует правилу знаков деления)
  • ( Не число или прерывание для неопределенной формы )

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

Сравнения

[ редактировать ]

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

  • Введите каламбур числа в целочисленный тип, чтобы просмотреть знаковый бит в битовом шаблоне;
  • используя ISO C copysign() функция (операция IEEE 754 copySign) для копирования знака нуля в некоторое ненулевое число;
  • используя ISO C signbit() макрос (операция IEEE 754 isSignMinus), который возвращает, установлен ли знаковый бит числа;
  • взяв обратную величину нулю, чтобы получить либо 1/(+0) = +∞, либо 1/(−0) = −∞ (если исключение деления на ноль не перехвачено).

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

Однако некоторые языки программирования могут предоставлять альтернативные операторы сравнения, которые различают два нуля. Так обстоит дело, например, с метод равенства в Java Double класс оболочки . [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 .

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

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 2371246c5cfc4a9c2fe7a3a55fa4c71a__1718900760
URL1:https://arc.ask3.ru/arc/aa/23/1a/2371246c5cfc4a9c2fe7a3a55fa4c71a.html
Заголовок, (Title) документа по адресу, URL1:
Signed zero - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)