Pregunta

#include <iostream>
using namespace std;

int main()
{
    double u = 0;
    double w = -u;
    cout << w << endl;
    return 0;
}

¿Por qué sale este gran fragmento de código? -0 y no 0, como era de esperar?

¿Fue útil?

Solución

El estándar IEEE 754 para números de punto flotante tiene el bit de signo separado de la mantisa, lo que permite que el cero sea negativo. Wikipedia Debería poder ayudar a explicar esto.

Otros consejos

En punto flotante IEEE 0 y -0 son ambos valores distintos, de aquí en "Valores especiales":

Tenga en cuenta que -0 y +0 son valores distintos, aunque ambos se comparan como iguales.

El estándar IEEE 754 para aritmética de punto flotante hace una distinción entre +0 y -0, esto se puede utilizar cuando se trata de números muy pequeños redondeados a cero donde el signo todavía tiene importancia.

¡Porque el "cero negativo" es un número válido!

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

Mira este articulo: http://en.wikipedia.org/wiki/Floating_point.Tenga en cuenta que hay un bit de signo, incluso si el valor es cero.

Porque un doble puede tener valores -0, +0, -infinito, +infinito y NaN, lo que puede ser el resultado de varias expresiones interesantes, como 0/0.

Mirar aquí para más información.

Porque tus expectativas están equivocadas.

IEEE requiere que el cero positivo y negativo se representen por separado.

Eso es lo que estás viendo aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top