cout stampe “-0” invece di “0”
-
09-06-2019 - |
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?
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!
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.