据我所知,double和long double都是ANSI C标准的浮点数。但ANSI C并未规定long double的确切精度。所以对于不同平台可能有不同的实现。有的是8字节,有的是10字节,有的是12字节或更多。一般来说long double的精度要高于double, 至少相等,就像int和long int一样。但同一平台也可能不一样,比如MS自己的C/C++/VC++就不一样。好像以前16位的VC++中long double用10字节,而Win32就改用了8字节,和double一样了。MS保留long double类型的库函数是为了兼容,用户能够继续使用以前编写的代码。MS也说明以后编写程序时不要再使用asinl, acosl这样的long double类型的库函数。但long double的数据类型还是要保留的,它毕竟是ANSI C标准规定的数据类型。说不定哪天他的C/C++会把long double弄成16字节的呢。
我在VC6.0下用sizeof(long double)的出来的结果是8,同double的一样; 但是在linux下有G++和VI 得到的sizeof(long double)=12;double=8;

本文探讨了ANSIC标准下的longdouble与double两种浮点数类型的精度差异。longdouble的具体精度未被ANSIC明确规定,因此在不同的平台上其实现有所不同。文章通过VC6.0和Linux G++环境下对这两种类型大小的比较,展示了longdouble的精度变化。
2万+

被折叠的 条评论
为什么被折叠?



