3.3.3 C语言中的浮点数类型
2025年09月26日
3.3.3 C语言中的浮点数类型
C语言中的浮点数类型有float、double和long double三种,其中float对应IEEE754标准中的单精度浮点数格式;double对应IEEE754标准中的双精度浮点数格式;long double类型是一种扩展的双精度浮点数类型。long double类型的长度和格式随编译器和处理器类型的不同而不同,它在Microsoft Visual C++6.0版本的编译器中和double类型一样,都是64位的双精度数据,但是在IA-32上编译时,其为80位双精度格式数据。
在C语言中要特别注意数据类型转换时出现的一些问题。比如把int类型数据转换成float类型时,由于int类型为32位数据,因此转换时不会发生溢出,但是有效数字可能会被舍去;把int类型数据转换为double类型数据时,可以使数据保留其值;把double类型数据转换为float类型数据时,可能会发生溢出;把float类型数据转换为int类型数据时,由于int类型数据是整数型,因此,小数部分可能就会被舍去。
1996年6月,阿丽亚娜5型运载火箭在发射37秒后爆炸,损失超过数十亿美元。其中,发射失败的原因之一就是导航系统的计算机向控制引擎的计算机发送了一个无效数据。事后的分析报告指出这个数据是将一个64位的浮点数转换为16位整数数据时产生了溢出,使数据出现严重偏差,最终导致严重事故。可见,在编程时一定要重视数据的类型以及其转换时可能出现的问题。