cout imprime "-0" em vez de "0"
-
09-06-2019 - |
Pergunta
#include <iostream>
using namespace std;
int main()
{
double u = 0;
double w = -u;
cout << w << endl;
return 0;
}
Por que este grande pedaço de código de saída -0
e não 0
, como seria de esperar?
Solução
O padrão IEEE 754 para números de ponto flutuante tem o bit de sinal separado da mantissa, que permite a zero para ser negativa. Taxas deve ser capaz de ajudar a explicar isso.
Outras dicas
Em ponto flutuante do IEEE 0
e -0
ambos são valores distintos, a partir de aqui em "Valores Especiais":
Observe que -0 e +0 são distintos valores, embora ambos comparar como iguais.
O padrão IEEE 754 para aritmética de ponto flutuante faz uma distinção entre +0
e -0
, este pode ser utilizado quando se lida com números muito pequenos arredondados para zero, onde o sinal ainda tem uma importância.
Porque "zero negativo" é um número válido!
Dê uma olhada neste artigo: http://en.wikipedia.org/wiki/Floating_point.Observe que há um bit de sinal, mesmo se o valor for zero.
Porque um casal pode, de facto, valores -0, +0, -infinito, +infinito e NaN, que pode ser resultado de várias expressões interessantes, como o 0/0.
Olhar aqui para obter mais informações.
Porque as suas expectativas estão erradas.
IEEE requer positivos e zero negativo ser representados separadamente.
Que é que você está vendo aqui.