cout affiche "-0" au lieu de "0"
-
09-06-2019 - |
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?
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
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!
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.