由於代碼段如下,我只是想知道C++ 32位VS 64的浮動限制
- 爲什麼長雙的最大值是64位比32位更小?
- 爲什麼64位版本不能像32位版本那樣擴展數量以填充「40」精度輸出?
- 看來LDBL_MIN和LDBL_MAX的值是相等的,是一個錯誤嗎?
我已經查看了我的機器中的float.h文件,但找不到這些宏常量的顯式定義。
測試代碼(平臺= 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位結果(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位結果(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
謝謝。
[編輯]:使用最新的MinGW64-TGM 4.7.1,LDBL_MAX,LDBL_MIN的「錯誤」似乎被刪除。
雖然'.cpp'通常用於C++文件,CPP通常用於指代C預處理器。相應地修正了標題。 – 0xC0000022L