ноль со знаком -0 Обработка -0 по сравнению с 0

## Описание

Двоичное представление десятичных чисел таково, что один бить из 64 (= 8 байт) предназначен для знака мантиссы. Это верно для любого десятичного числа, которое может быть симметрично положительно или отрицательно. Это также применимо к нулевому значению.

Можно принудительно поставить знак минуса к нулю используя унарный минус и написав `-0`.

Большинство операций и функций не учитывает знак нуля, но есть некоторые исключения. Например, деление и `atan()` дают неодинаковые результаты для `0` и `-0`.

В следующих примерах показаны интересные случаи.

Как и `0`, `-0` не хранится в разрежённых матрицах, и, таким образом, игнорируется.

## Примеры

`0` и `-0` различаются:

    bitstring([0 ; -0])
    [1/0 1/-0]
    a = - 0 - 0;    1 / a
    a = - 0 + (-0); 1 / a
    1 / (0*(-0))
    1 / prod([-0 1])
    1 ./ ((-0)^[1 2 3])
    [atan(0,0), atan(0,-0)]

    --> bitstring([0 ; -0])
     ans  =
    !0000000000000000000000000000000000000000000000000000000000000000  !
    !1000000000000000000000000000000000000000000000000000000000000000  !

    --> [1/0 1/-0]
     ans  =
       Inf  -Inf

    --> a = - 0 - 0; 1 / a
     ans  =
      -Inf

    --> a = - 0 + (-0); 1 / a
     ans  =
      -Inf

    --> 1 / (0*(-0))
     ans  =
      -Inf

    --> 1 / prod([-0 1])
     ans  =
      -Inf

    --> 1 ./ ((-0)^[1 2 3])
     ans  =
      -Inf   Inf  -Inf

    --> [atan(0,0), atan(0,-0)]
     ans  =
       0.   3.1415927

.. но побеждает + 0:

    a = - 0 + 0; 1 / a

    --> a = - 0 + 0; 1 / a
     ans  =
       Inf

`0` и `-0` НЕ различаются:

    [sign(-0), 1/sign(-0)]
    sign(0)==sign(-0)
    [ isequal(0,-0), 0==-0,  -0<0,  0>-0 ]
    1 / sin(-0)

    --> [sign(-0), 1/sign(-0)]
     ans  =
       0.   Inf

    --> sign(0)==sign(-0)
     ans  =
      T

    --> [ isequal(0,-0), 0==-0,  -0<0,  0>-0 ]
     ans  =
      T T F F

    --> 1 / sin(-0)
     ans  =
       Inf

Кодирование разрежённых матриц игнорирует `-0`, как это делается и для `0`:

    sparse([-0 0 1])
    1 / sparse(-0)

    --> sparse([-0 0 1])
     ans  =
    (  1,  3) sparse matrix
    (  1,  3)     1.

    --> 1 / sparse(-0)
     ans  =
        Inf

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

- %inf
- zeros
- sparse
- number_properties
- Отрицательный ноль в Википедии