以下内容摘自善良的小甜瓜老师的程序设计基础第五版3.2.5浮点型数据

浮点型数据是用来表示具有小数点的实数的。为什么在C语言中把实数称为浮点型数呢?在C语言中,实数是以指数形式存放在存储单元中的。一个实数表示为指数可以有不止一种形式,如3.1459可以表示为3.14159×100,0.314159×101,0.0314159×102,31,14159×10-1,或314,159×10-2等,它们代表一个值。可以看到:小数点的位置是可以在314159几个数字之间、之前或之后(加0)浮动的,只要在小数点位置浮动的同时改变指数的值,就可以保证它的值不会改变。由于小数点位置可以浮动,所以实数的指数形式称为浮点数。
浮点数类型包括float型(单精度浮点型)、double(双精度浮点型)、long double(长双精度浮点型)。
(1)float型(单精度浮点型)。编译系统为每一个float型变量分配4个字节,数值以规范化的二进制数指数形式存放在存储单元中。在存储时,系统将实型数据分成小数部分和指数部分两个部分,分别存放。小数部分的小数点前面的数为0.如3.14159在内存中的存放形式可以用图3.11表示。

图3.11是用十进制数来示意的,实际上在计算机中时用二进制数来表示小数部分以及用2的幂次来表示指数部分的。在4个字节(32位)中,究竟用多少位来表示小数部分,多少位来表示指数部分,C标准并无具体规定,由各C语言编译系统自定。有的C语言编译系统以24位表示小数部分(包括符号),以8位表示指数部分(包括指数的符号)。由于用二进制形式表示一个实数以及存储单元的长度是有限的,因此不可能得到完全精度的值,只能存储成有限的精确度。小数部分占的位(bit)数愈多,数的有效字愈多,精度也就愈高。指数部分占的位数愈多,则能表示的数的数值范围愈大。float型数据能得到6位有效数字,数值范围为-3.4×10-38到3.4×1038。
(2)double型(双精度浮点型)。为了扩大能表示的数值范围,用8个字节存储一个double型数据,可以得到15位有效数字,数值范围为-1.7×10308到1.7×10308。为了提高运算精度,在C语言中进行浮点数的算术运算时,将float型数据都自动转换为double型,然后进行运算。
(3)long double型(长双精度)型,不同的编译系统对long double型的处理方法不同,Turbo C对long double型分配16个字节。而Visual C++则对long double 型和double型一样处理,分配8个字节。请读者在使用不同的编译系统时注意其差别。

说明:
用有限的存储单元不可能完全精确地存储一个实数,例如float型变量能存储的最小正数为1.2×10-38,不能存放绝对值小于此值得数,例如10-40。float型变量能存储的范围见图3.12。即数值可以在3个范围内:(1)-3.14×10-38到-1.2×10-38;(2)0;(3)1.2×10-38到3.4×1038。