- 编写高质量代码:改善C程序代码的125个建议
- 马伟 著
- 443字
- 2025-03-16 17:14:06
建议3:尽量少使用浮点类型
C语言标准规定的浮点数据类型有float、double、long double三种,如表1-7所示。
表1-7 ANSI标准定义的浮点数据类型

和整型一样,浮点数据类型既没有规定每种类型占多少字节,也没有规定采用哪种表示形式。因此,浮点数据类型的实现在各种平台上差异很大,有的处理器有浮点运算单元(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类型,至少它们也应该相等。