Почему у Gnu Octave отрицательные нули? - PullRequest
24 голосов
/ 21 января 2010

Это странный вопрос, который меня озадачил. Я недавно заметил в приглашении Gnu Octave, можно вводить отрицательные нули, например так:

octave:2> abomination = -0

И он тоже это помнит:

octave:3> abomination
abomination = -0

В интересах здравого смысла отрицательный ноль равен обычному нулю. Но я также заметил, что у знака есть некоторые другие эффекты. Как это:

octave:6> 4 * 0
ans = 0
octave:7> 4 * -0
ans = -0
octave:8> 4 / 0
warning: division by zero
ans = Inf
octave:9> 4 / -0
warning: division by zero
ans = -Inf

Как видно, знак сохраняется при определенных операциях. Но мой вопрос почему. Это похоже на радикальный отход от стандартной математики, где ноль практически без знака. Есть ли привлекательные математические свойства для этого? Имеет ли это значение в определенных областях математики?

К вашему сведению: Matlab, для которого моделируется октава, не имеет отрицательных нулей. Любые попытки их использования рассматриваются как обычные нули.

EDIT: Matlab имеет отрицательные нули, но они не отображаются в выводе по умолчанию.

Ответы [ 3 ]

30 голосов
/ 21 января 2010

Ноль со знаком является частью форматов IEEE-754, и их семантика полностью определяется этими форматами. Они оказываются весьма полезными, особенно когда имеешь дело со сложными разрезами ветвей и преобразованиями комплексной плоскости (для получения более подробной информации см. Многие работы В. Кахана по этому вопросу, например, классические «Сокращения ветвей для сложных элементарных функций» или «Многое Ado о ничто не знаковый бит ").

Краткая версия: отрицательный ноль часто полезен при численных расчетах, и программы, которые пытаются защитить пользователей от его появления, часто оказывают им плохую услугу. Кстати, MATLAB, похоже, тоже использует отрицательный ноль, но, поскольку он печатает числа с помощью процедуры printf хоста, они отображают то же самое, что и положительный ноль в Windows.

См. это обсуждение на форумах MATLAB для более подробной информации о подписанном нуле в MATLAB.

9 голосов
/ 21 января 2010

IEEE-754 числа с плавающей точкой также имеют это свойство. Это может пригодиться для пределов и бесконечностей. Например, предел 1 / x с x & rarr; + & INFIN; равно 0, но функция приближается с положительной стороны оси, с x & rarr; & Минус; & INFIN; функция приближается с отрицательной стороны, поэтому в этом случае можно задать предел как минус 0.

7 голосов
/ 21 января 2010

Ноль с подписью

Ноль со знаком повторяет математическое Анализ концепции приближения 0 от ниже как односторонний предел, который может обозначим через x → 0−, x → 0− или x → ↑ 0. Обозначение "−0" может использоваться неформально обозначить отрицательное число это было округлено до нуля. Понятие отрицательного нуля также имеет некоторые теоретические приложения в статистическая механика и др. дисциплин.

...