Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português - 日本語 -
Справка Scilab >> Основные функции > Плавающая запятая > ноль со знаком -0

ноль со знаком -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

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

Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Tue Feb 25 08:54:54 CET 2020