2016-03-26 4 views
2

Der unten gezeigte Code wurde erhalten here. Aber die Ausgabe ist etwas anders.Ich erhalte unterschiedliche Ausgabe, wenn ich den Code in VS2015 verarbeite. Gibt es eine Erklärung?

#include <iostream> 
#include <limits> 

using namespace std; 

int main() 
{ 
    cout << "The quiet NaN for type float is: " 
     << numeric_limits<float>::quiet_NaN() 
     << endl; 
    cout << "The quiet NaN for type int is: " 
     << numeric_limits<int>::quiet_NaN() 
     << endl; 
    cout << "The quiet NaN for type long double is: " 
     << numeric_limits<long double>::quiet_NaN() 
     << endl; 
} 

Dies ist der Ausdruck in meinem VS2015:

The quiet Nan for type float is : nan 
The quiet Nan for type int is : 0 
The quiet Nan for type long double is : nan 

während der Ausgang in dem MSDN-Artikel sagt, sollte es sein:

The quiet NaN for type float is: 1.#QNAN 
The quiet NaN for type int is: 0 
The quiet NaN for type long double is: 1.#QNAN 

, die mit den Werten in der Tabelle übereinstimmt, gezeigt auf this blog entry.

+0

Microsoft verwendet, um diese funky Dinge zu verwenden, die im Zitat von MSDN beschrieben werden. Aber C99 standardisierte, was die Ausgabe für NaN-Werte sein sollte, was Ihre Ausgabe zeigt, also sieht es so aus, als ob Microsoft endlich den C-Standard eingeholt hat. –

+0

Sehr nett von dir, meine Frage zu beantworten. Vielen Dank. – Mao

+0

Gibt es einen Referenzartikel von MS Doc zur Änderung? – rents

Antwort

0

Die Veränderung der Sentinel-Strings von VS für diesen speziellen IEEE Float-Wert verwendet wird unter "Infinity und NaN Formatierung" in aufgelistet "Visual C++ Geschichte 2003 ändern - 2015" https://msdn.microsoft.com/en-us/library/bb531344.aspx

bei Jedoch es wie sie verpaßt sieht Aktualisierung in einigen der VS2015 Dokumente z https://msdn.microsoft.com/library/9e817177-0e91-48e6-b680-0531c4b26625.aspx; Ich habe eine Korrektur eingereicht, um sie wissen zu lassen, dass es nicht ganz richtig ist.

Verwandte Themen