# Zero negativo

Zero negativo é zero com um sinal associado. Na aritmética ordinária, o número 0 tem um sinal, como em -0, +0 e 0. Na ciência da computação, algumas representações numéricas permitem a existência de dois zeros, muitas vezes denotados por -0 (zero negativo) e +0 (zero positivo), considerados iguais pelas operações de comparação numérica, mas com possíveis comportamentos diferentes em determinadas operações. Isso ocorre no sinal e na magnitude e nos complementos para uma representação de números com sinais inteiros e na maioria das representações de números de ponto flutuante. O número 0 normalmente é codificado como +0, mas pode ser representado por +0, −0 ou, ainda, ±0, com sinal de mais ou menos.
O padrão IEEE 754 para aritmética de ponto flutuante (atualmente usado pela maioria dos computadores e linguagens de programação que suportam números de ponto flutuante) requer +0 e -0. A aritmética real com zeros negativos pode ser considerada uma variante da reta real estendida tal que 1/-0 = -∞ e 1/+0 = +∞; divisão é apenas indefinida para ± 0/±0 e ±∞/±∞.
O zero sinalizado negativamente ecoa o conceito da análise matemática de aproximar 0 para baixo como um limite unilateral, que pode ser denotado por x → 0$^−$, x → 0−, or x → ↑0. A notação "-0" pode ser usada informalmente para denotar um pequeno número negativo que foi arredondado para zero. O conceito de zero negativo também tem algumas aplicações teóricas na mecânica estatística e em outras disciplinas.
Alega-se que a inclusão de zero com sinal no IEEE 754 facilita o alcance da precisão numérica em alguns problemas críticos, em particular quando se computa com funções elementares complexas. Por outro lado, o conceito de zero com sinal é contrário à suposição geral feita na maioria dos campos matemáticos de que zero negativo é a mesma coisa que zero. As representações que permitem zero negativo podem ser uma fonte de erros nos programas, se os desenvolvedores de software não levarem em conta que enquanto as duas representações de zero se comportam como iguais sob comparações numéricas, elas produzem resultados diferentes em algumas operações.

## Representações

A codificação de complemento de dois, amplamente utilizada não permite um zero negativo. Em uma representação de sinal e magnitude 1+7 bits de inteiros, o zero negativo é representado pela cadeia de bits 10000000. Em uma representação de complemento de um 8 bits, o zero negativo é representado pela cadeia de bits 11111111. Em todas as três codificações, o zero positivo é representado por 00000000.
Em números binários de ponto flutuante IEEE 754, valores zero são representados pelo expoente polarizado e significando que ambos sendo zero. O zero negativo tem o bit de sinal definido para um. Um pode obter zero negativo como o resultado de determinados cálculos, por exemplo, como resultado de subfluxo aritmético em um número negativo, ou −1.0×0.0, ou simplesmente como −0.0.
Na codificação de ponto flutuante decimal IEEE 754, um zero negativo é representado por um expoente que é qualquer expoente válido no intervalo para a codificação, o verdadeiro significando sendo zero, e o bit de sinal sendo um.

## Propriedades e manuseio

O padrão de ponto flutuante IEEE 754 especifica o comportamento de zero positivo e zero negativo em várias operações. O resultado pode depender das definições do modo de arredondamento.

### Notação

Em sistemas que incluem zeros sinalizados e não sinalizados, a notação $0^{+}$ e $0^{-}$ é às vezes usada para zeros sinalizados.

### Arimética

A adição e a multiplicação são comutativas, mas há algumas regras especiais que devem ser seguidas, o que significa que as regras matemáticas usuais para a simplificação algébrica podem não se aplicar. O sinal $=$ abaixo mostra o resultado sinalizado das operações.
A regra usual para sinais é sempre seguida quando se multiplica ou divide:
* ${\frac {-0}{\left|x\right|}}=-0\,\!$ (para $x$ diferente de 0)
* $(-0)\cdot (-0)=+0\,\!$
Existem regras especiais para adicionar ou subtrair zero sinalizado:
* $x+(\pm 0)=x\,\!$ (para $x$ diferente de 0)
* $(-0)+(-0)=(-0)-(+0)=-0\,\!$
* $(+0)+(+0)=(+0)-(-0)=+0\,\!$
* $x-x=x+(-x)=+0\,\!$ (para qualquer finito $x$, −0 quando arrendondado para negativo)
Devido ao zero negativo (e também quando o modo de arredondamento é para cima ou para baixo), as expressões −(x − y) e (−x) − (−y), para variáveis de ponto flutuante x e y, não podem ser substituídas por y − x. No entanto, (−0) + x podem ser substituídas por x com arredondamento para o mais próximo (exceto quando x pode ser uma sinalização NaN).
Algumas outras regras especiais:
* ${\sqrt {-0}}=-0\,\!$
* ${\frac {-0}{-\infty }}=+0\,\!$ (segue a regra do sinal para a divisão)
* ${\frac {\left|x\right|}{-0}}=-\infty \,\!$ (para diferente de zero $x$, segue a regra do sinal para a divisão)
* ${\pm 0}\times {\pm \infty }={\mbox{NaN}}\,\!$ (NaN ou suspende para uma forma inderteminada)
* ${\frac {\pm 0}{\pm 0}}={\mbox{NaN}}\,\!$
Divisão de um número diferente de zero por zero define a divisão por zero flag, e uma operação produzindo um NaN define o sinalizador de operação inválido. Um tratamento de exceção é chamado se habilitado para o sinalizador correspondente.

## Comparações

De acordo com a norma IEEE 754, o zero negativo e o zero positivo devem ser comparados com os operadores de comparação usuais (numéricos), como os operadores de C e Java. Nessas línguas, truques de programação especiais podem ser necessários para distinguir os dois valores:
* Emulando os tipos (type punning) de número para um tipo inteiro, de modo a olhar para o bit de sinal no padrão de bits;
* usando o ISO C copysign função (IEEE 754 operação copySign) para copiar o sinal do zero para algum número diferente de zero;
* usando o ISO C signbit macro (IEEE 754 operação isSignMinus) que retorna se o bit de sinal de um número é definido;
* tomando o recíproco do zero para obter 1/(+0) = +∞ ou 1/(−0) = −∞ (se a exceção da divisão por zero não esteja comprometida).
Nota:Convertendo o tipo integral não funcionará sempre, especialmente em sistemas de complemento de dois.
Entretanto, algumas linguagens de programação podem fornecer operadores de comparação alternativos que distinguem os dois zeros. Este é o caso, por exemplo, do método equals na classe wrapper Double da Java.

## Usos científicos

Informalmente, pode-se usar a notação "-0" para um valor negativo que foi arredondado para zero. Esta notação pode ser útil quando um sinal negativo é significativo; Por exemplo, ao tabular temperaturas Celsius, onde um sinal negativo significa "abaixo de zero".
Na mecânica estatística, às vezes usa-se a temperatura negativa para descrever sistemas com inversão de população, que pode ser considerada como tendo uma temperatura maior do que o infinito positivo, porque o coeficiente de energia na função de distribuição da população é & menos;1/Temperatura. Neste contexto, uma temperatura de minus 0 é uma temperatura (teórica) maior do que qualquer outra temperatura negativa, correspondendo à extensão máxima (teórica) possível de inversão da população, o extremo oposto a +0.