数据类型说明 实型
1 实型常量的表示方法
实数又称浮点数,实数有两种表示形式。
(1)十进制小数形式,它由数字和小数点组成(注意必须有小数点)
如:.123(0.123), 123.(123.0)
(2)指数形式
如:123e3或123E3都代表123*10^3,但注意字母e或E之前必须有数字,且e后面的指数必须为整数。
2 实型变量
2.1 实型数据在内存中的存放形式
一个实数数据一般在内存中占4个字节(32位)与整型数据的存储方式不同,实型数据是按指数形式存储的,系统把一个实型数据分成小数部分与指数部分,分别存放。指数部分采用规范化的指数形式。
如:3.14159 的存放形式如下
+ .314159 1
第一部分符号‘+’表示符号 +
第二部分 .314159 表示小数部分
第三部分 1 表示指数 10^1
实际上在计算机中是用二进制数来表示小数部分以及用2的幂次来表示指数部分
在4个字节(32位)中,究竟用多少位表示小数部分,多少位来表示指数部分,标准C并无具体规定,由各C编译系统自定,不少C编译系统以24位表示小数部分(包括符号)以8位表示指数部分(包括指数的符号)小数部分占的位数越多,数的有效数字就越多精度就越高,指数部分占的位数越多,刚能表示的数值范围越大。
2.2 实型变量的分类
C实型变量可分为:
单精度(float) 32位 有效数字 6~7位 数值范围 10^-37 ~ 10^38
双精度(double)64位 有效数字 15 ~16位 数值范围 10^-307 ~ 10^308
长双精度型(long double)128位 有效数字 18 ~ 19 位 数值范围 10^-4931 ~ 10^4932
2.3 实型数据的舍入误差
由于实型变量是用有限的存储单元存储的,因此能提供的有效数字总是有限的,在有效位以外的数字将被舍去,由此可能会产生一些误差。
看下面的程序
#include <stdio.h>
void main()
{
float a, b;
a = 123456.789e5;
b = a + 20;
printf("%f\n", b);
}
运行的结果是 12345678848.000000
不是想像是 12345678920
可以看到前8位是准确的,后几位不是准确的