天天看点

《编写高质量代码:改善c程序代码的125个建议》——建议3:尽量少使用浮点类型

本节书摘来自华章计算机《编写高质量代码:改善c程序代码的125个建议》一书中的第1章,建议3,作者:马 伟 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

c语言标准规定的浮点数据类型有float、double、long double三种,如表1-7所示。

《编写高质量代码:改善c程序代码的125个建议》——建议3:尽量少使用浮点类型

和整型一样,浮点数据类型既没有规定每种类型占多少字节,也没有规定采用哪种表示形式。因此,浮点数据类型的实现在各种平台上差异很大,有的处理器有浮点运算单元(floating point unit,fpu),称为硬浮点(hard-float)实现;而有的处理器没有浮点运算单元,只能做整数运算,也就是需要用整数运算来模拟浮点运算,这种实现方式称为软浮点(soft-float)实现。迄今为止,大部分平台的浮点数实现都遵循ieee 754标准(ieee standard for binary floating-point arithmetic,ansi/ieee std 754-1985)。

这里需要特别说明的是,ansi c并未规定long double类型的准确精度。正因为如此,对于不同的平台,long double类型可能有不同的实现,有的是8字节,有的是10字节,还有的是12字节或更多。在x86平台上,大多数编译器实现的long double类型是80位,因为x86的浮点运算单元具有80位精度。如在vc++ 2010中运行“sizeof(long double)”所得的结果为8,而在gcc中运行“sizeof(long double)”所得的结果则为12(即96位)。但一般来说,long double类型的精度要高于double类型,至少它们也应该相等。