C语言的实型用来表示实数,因为计算机只能表示有限位的实数,所以实型是实数的一个有限子集,实型数据可以分为实型变量和实型常量。
(1)实型变量的分类
实型变量按数值的取值范围不同分为以下三种:
· 单精度实型 :以float作为类型说明符。
· 双精度实型 :以double作为类型说明符。
· 长双精度实型 :以long double作为类型说明符。
各种实型变量的数据长度、精度和取值范围与所选择的系统有关,不同的系统有差异。在大多数C系统中,float型数据在内存中占4字节(32位),double型数据在内存中占8字节(64位)。
表2-2中列出了Visual C++系统中各种实型变量的数据长度、精度和取值范围。
表2-2 Visual C++系统实型数据的存储空间和取值范围
(2)实型变量的定义
对每一个实型变量,都应在使用前进行定义。例如:
(1)实型常量的表达形式
实型常量就是实常数。有以下两种表达形式:
· 十进制小数形式:例如0.125、.125、-0.125、-125.0、1.25。
· 指数形式:一般格式是“实数(整数)+e(或E)+整数”。例如,123.456的指数形式是1.23456e2、1.23456E2、12.3456e1、0.0123456e4、.123456e3、12345.6e-2等,而e2、1.23e3.5、e、12345E等都是不合法形式。
(2)实型常量的类型
实型常量的类型和所选的编译系统相关。例如,Visual C++系统将实型常量作为双精度来处理:
系统将1.23456和6543.21按双精度存储(占64位)和运算,得到一个双精度的乘积,然后取前7位赋给变量x,这样做可以保证计算结果更精确,但是降低了运算的速度。
本例中乘积常量是double类型,有些编译系统由于变量x和右边表达式的类型不一致,会给出“从‘double ’转换到‘float ’,可能丢失数据”的警告。为了避免编译时出现警告,可以在实数常量的后面加字母f(或F),例如,x=1.23456f*6543.21f;,这样系统就会将1.23456和6543.21按单精度存储(占32位)和运算,也可以选择直接将变量x定义成double类型。
一个实型常量可以赋给一个float型、double型或long double型变量,系统根据变量的类型自动截取实型常量中相应的有效数字。
【例2-3】 阅读下面的程序,给出程序的输出结果。
运行结果:
由此看出,由于float型变量a只能接受7位有效数字,因此最后三位小数是不准确的,而double型变量b能够接受全部的10位数字。产生这种现象的原因是实数在内存中是以指数形式存放的,这里不做详细叙述。