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?

Foi útil?

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!

http://en.wikipedia.org/wiki/%E2%88%920_(número)

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top