C++ 32-bit vs 64-bit floating-limit

Gegeben das code-segment wie folgt, ich möchte nur wissen,

  • warum der maximale Wert von long double ist kleiner in der 64bit als in 32bit?
  • warum 64-bit-version erweitern können, wie viel stellen, wie in 32-bit-version zu füllen, die "40" Präzisions-Ausgabe?
  • es scheint, dass die Werte der LDBL_MIN und LDBL_MAX gleich sind, ist das ein bug?

Ich habe mir in den Schwimmer.h-Dateien in meinem Rechner aber nicht finden können, die explizite definition dieser makro-Konstanten.

Testen von Code (Platform = Win7-64bit)

#include <cfloat>
#include <iomanip>
cout<<"FLT_MAX   ="<< setprecision(40) << FLT_MAX  << endl;
cout<<"DBL_MAX   ="<< setprecision(40) << DBL_MAX  << endl;
cout<<"LDBL_MAX  ="<< setprecision(40) << LDBL_MAX << endl;
cout<<"FLT_MIN   ="<< setprecision(40) << FLT_MIN  << endl;
cout<<"DBL_MIN   ="<< setprecision(40) << DBL_MIN  << endl;
cout<<"LDBL_MIN  ="<< setprecision(40) << LDBL_MIN << endl;

32-bit-Ergebnis (MinGW-20120426)

FLT_MAX  =340282346638528859811704183484516925440
DBL_MAX  =1.797693134862315708145274237317043567981e+308
LDBL_MAX =1.189731495357231765021263853030970205169e+4932
FLT_MIN  =1.175494350822287507968736537222245677819e-038
DBL_MIN  =2.225073858507201383090232717332404064219e-308
LDBL_MIN =3.362103143112093506262677817321752602598e-4932

64-bit-Ergebnis (MinGW64-TDM 4.6)

FLT_MAX  =340282346638528860000000000000000000000
DBL_MAX  =1.7976931348623157e+308
LDBL_MAX =1.132619801677474e-317
FLT_MIN  =1.1754943508222875e-038
DBL_MIN  =2.2250738585072014e-308
LDBL_MIN =1.132619801677474e-317

Dank.

[Edit]: Mit der neuesten MinGW64-TGM 4.7.1, die "bugs" von LDBL_MAX, LDBL_MIN scheint entfernt.

  • Während .cpp wird Häufig verwendet für C++ - Dateien, CPP wird oft verwendet, um sich auf der C Pre-Prozessor. Behoben, dass der Titel entsprechend.
InformationsquelleAutor YamHon.CHAN | 2012-10-03
Schreibe einen Kommentar