Почему в Gnu Octave отрицательные нули?

Это странно, я озадачен. Недавно я заметил, что в приглашении 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, по образцу которого смоделирована октава, не имеет отрицательных нулей. Любые попытки их использования рассматриваются как обычные нули.

РЕДАКТИРОВАТЬ: Matlab имеет отрицательные нули, но они не отображаются в выводе по умолчанию.


person BigBeagle    schedule 21.01.2010    source источник
comment
К вашему сведению: Octave никоим образом не основан на Matlab. Octave создан по образцу Matlab и предназначен для решения тех же проблем, но он определенно не основан на Matlab.   -  person Joachim Sauer    schedule 21.01.2010
comment
стандартная математика и арифметика с плавающей запятой — две совершенно разные концепции.   -  person ndim    schedule 21.01.2010
comment
@Иоахим. Я исправил это, спасибо.   -  person BigBeagle    schedule 21.01.2010
comment
Для целого числа отрицательный ноль — это мерзость. Но даже они были возможны в компьютерах с дополнением по единице. Я думаю, что CDC когда-то производили машины с дополнением до единицы.   -  person President James K. Polk    schedule 22.01.2010


Ответы (3)


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

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

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

person Stephen Canon    schedule 21.01.2010
comment
Спасибо за улов Matlab. Я добавил примечание к вопросу. - person BigBeagle; 21.01.2010

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

person Joey    schedule 21.01.2010
comment
Да, в некоторых математических вычислениях важно различать -Inf и +Inf, например, log(0)=-Inf. - person petantik; 21.01.2010
comment
Ну, у бесконечности всегда есть знак. В любом случае, это не было моей целью. - person Joey; 21.01.2010

Ноль со знаком

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

person nos    schedule 21.01.2010
comment
Хм, не знаю, что можно сделать, но в части обозначений было потеряно некоторое форматирование, так что теперь первые две части выглядят одинаково. - person BigBeagle; 21.01.2010