由于代码段如下,我只是想知道
- 为什么长双的最大值是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似乎去除。