💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 4.C语言实型数据 实型也称为浮点型。实型常量也称为实数或者浮点数。在C语言中,实数只采用十进制。它有二种形式:十进制小数形式和指数形式。 1) 十进制数形式 由数码0~ 9和小数点组成。例如:0.0、25.0、5.789、0.13、5.0、300.、-267.8230 等均为合法的实数。 注意,必须有小数点。 2) 指数形式 由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。其一般形式为:     a E n(a为十进制数,n为十进制整数) 其值为 a*10n。如: 2.1E5 (等于2.1*105) 3.7E-2 (等于3.7*10-2) 0.5E7 (等于0.5*107) -2.8E-2 (等于-2.8*10-2) 以下不是合法的实数: 345 (无小数点) E7 (阶码标志E之前无数字) -5 (无阶码标志) 53.-E3 (负号位置不对) 2.7E  (无阶码) 标准C允许浮点数使用后缀。后缀为“f”或“F”即表示该数为浮点数。如356f和356.是等价的。 【例3-5】说明了这种情况。 ~~~ main(){ printf("%f\n ",356.); printf("%f\n ",356); printf("%f\n ",356f); } ~~~ 注意,第4行在Dev C++中会报错。 ## 实型变量 1) 实型数据在内存中的存放形式 实型数据一般占4个字节(32位)内存空间。按指数形式存储。实数3.14159在内存中的存放形式如下: ![](http://www.lvtao.net/content/uploadfile/201404/3545ebce9625a6658cfa7f744b22f78220140421033812.gif) 说明: * 小数部分占的位(bit)数愈多,数的有效数字愈多,精度愈高。 * 指数部分占的位数愈多,则能表示的数值范围愈大。 2) 实型变量的分类 实型变量分为:单精度(float型)、双精度(double型)和长双精度(long double型)三类。 在Turbo C中单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。双精度型占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。 | 类型说明符 | 比特数(字节数) | 有效数字 | 数的范围 | |---|---|---| | float | 32(4) | 6~7 | 10-37~1038          | | double | 64(8) | 15~16 | 10-307~10308 | | long double | 128(16) | 18~19 | 10-4931~104932 | 实型变量定义的格式和书写规则与整型相同。例如: ~~~ float x,y; /* x,y为单精度实型量 */ double a,b,c; /* a,b,c为双精度实型量*/ ~~~ 3) 实型数据的舍入误差 由于实型变量是由有限的存储单元组成的,因此能提供的有效数字总是有限的。如下例。 【例3-6】实型数据的舍入误差。 ~~~ main(){ float a,b; a=123456.789e5; b=a+20; printf("%f\n",a); printf("%f\n",b); } ~~~ 注意:1.0/3*3的结果并不等于1。 【例3-7】 ~~~ main(){ float a; double b; a=33333.33333; b=33333.33333333333333; printf("%f\n%f\n",a,b); } ~~~ 从本例可以看出: * 由于a 是单精度浮点型,有效位数只有七位。而整数已占五位,故小数二位后之后均为无效数字。 * b 是双精度型,有效位为十六位。但Turbo C 规定小数后最多保留六位,其余部分四舍五入。 ## 实型常数的类型 实型常数不分单、双精度,都按双精度double型处理。