ноль со знаком -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)] 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]) ans = ( 1, 3) sparse matrix ( 1, 3) 1. --> 1 / sparse(-0) ans = Inf
Смотрите также
- %inf — бесконечность
- zeros — матрица, составленная из нулей
- sparse — sparse matrix definition
- number_properties — определение параметров чисел с плавающей запятой
- Отрицательный ноль в Википедии
Report an issue | ||
<< round | Плавающая запятая | Представление целых чисел >> |