Domanda

#include <iostream>
using namespace std;

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

Perché questo grande pezzo di codice di uscita -0 e non 0, come era da aspettarsi?

È stato utile?

Soluzione

Lo standard IEEE 754 per i numeri a virgola mobile è il bit di segno separato dalla mantissa, che permette di zero negativo. Wikipedia dovrebbe essere in grado di aiutare a spiegare questo.

Altri suggerimenti

In virgola mobile IEEE 0 e -0 sono entrambi valori distinti, da qui al di sotto di "Valori Speciali":

Nota che -0 e +0 sono distinti i valori, se entrambi confrontare uguale.

Lo standard IEEE 754 per l'aritmetica in virgola mobile, fa una distinzione tra +0 e -0, questo può essere usato quando ha a che fare con numeri molto piccoli arrotondato a zero, dove il segno ha ancora la sua importanza.

Perché "zero negativo" è un numero valido!

http://en.wikipedia.org/wiki/%E2%88%920_(numero)

Date un'occhiata a questo articolo: http://en.wikipedia.org/wiki/Floating_point.Si noti che c'è un bit di segno, anche se il valore è zero.

A causa di un doppio grado, infatti, hanno valori -0, +0, -infinito, +infinito e NaN, che può essere un risultato di varie espressioni, come 0/0.

Look qui per ulteriori informazioni.

Perché le vostre aspettative sbagliate.

IEEE richiede che il positivo e il negativo zero rappresentati separatamente.

Che è quello che stiamo vedendo qui.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top