Question

#include <iostream>
using namespace std;

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

Pourquoi cet excellent morceau de code génère-t-il -0 et non 0 , comme on pourrait s'y attendre?

Était-ce utile?

La solution

La norme IEEE 754 pour les nombres à virgule flottante a le bit de signe distinct de la mantisse, ce qui permet à zéro d'être négatif. Wikipedia devrait être en mesure de vous expliquer.

Autres conseils

Dans IEEE, 0 et -0 sont deux valeurs distinctes, tirées de ici sous" Valeurs spéciales ":

  

Notez que -0 et +0 sont distincts   valeurs, même si elles se comparent   égal.

La norme IEEE 754 pour l’arithmétique en virgule flottante fait la distinction entre +0 et -0 . Elle peut être utilisée pour traiter de très petits nombres arrondis à zéro où le le signe a toujours une importance.

Parce que "négatif zéro" est un numéro valide!

http://fr.wikipedia.org/wiki/%% E2% 88% 920_ (nombre)

Consultez cet article: http://en.wikipedia.org/wiki/Floating_point . Notez qu’il existe un bit de signe, même si la valeur est zéro.

Parce qu'un double peut en effet avoir les valeurs -0, +0, -infinity, + infinity et NaN, ce qui peut résulter de diverses expressions intéressantes, comme 0/0.

Regardez ici pour plus d'informations.

Parce que vos attentes sont fausses.

IEEE exige que le zéro positif et le zéro négatif soient représentés séparément.

C'est ce que vous voyez ici.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top