Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1011306
  • 博文数量: 81
  • 博客积分: 3308
  • 博客等级: 中校
  • 技术积分: 784
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-16 18:26
文章分类

全部博文(81)

文章存档

2014年(1)

2013年(5)

2011年(38)

2010年(37)

我的朋友

分类: C/C++

2011-12-20 11:41:17

 实型变量
1.实型数据在内存中的存放形式
实型数据一般占4个字节(32位)内存空间。按指数形式存储。实数3.14159在内存中的存放形式如下:
+
.314159
+
1
          数符           小数部分                        指符        指数
小数部分占的位(bit)数愈多,数的有效数字愈多,精度愈高。
指数部分占的位数愈多,则能表示的数值范围愈大。
实际上,小数部分是一个二进制纯小数,指数部分以补码存放。
2.实型变量的分类
实型变量分为:单精度(float型)、双精度(double型)和长双精度(long double型)三类。
在Turbo C中单精度型占4个字节(32位)内存空间,其中数符1位,小数部分23位,指符1位,指数7位,所以其数值范围为3.4E-38~3.4E+38,只能提供6~7位有效数字。双精度型占8 个字节(64位)内存空间,其中数符1位,小数部分23位,指符1位,指数10位,其数值范围为1.7E-308~1.7E+308,可提供15~16位有效数字。
表2.2
类型说明符
比特数(字节数)
有效数字
数的范围
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
3.实型变量的定义形式及初始化与整型相同。
类型说明符:float(单精度实型), double(双精度实型)。 
例如:
float x=1.27 , y=3.5 4;        /*x,y为单精度实型变量,且初值为:1.27和3.54*/
double a,b,c;    /* a,b,c为双精度实型变量*/
在计算机中,存放浮点数一般采用定点数和浮点数两种表示方法。C语言中采用的是浮点数表示法,以Turbo C中的float型的7.8125×10-2为例,其数据存储的格式如下

0
10100000000000000000000
1
0000011

数符        小数部分(23位)                指符   指数(7位)
即二进制的0.101×10-11,转化为十进制为0.625×2-3,即7.8125×10-2
       对于double型的数据小数部占53位(包括数符一位),指数部分占11位(包括指符一位)。
       对于long double型的数据小数部分占113位(包括数符一位),指数部分占15位(包括指符一位)。
4.实型数据的舍入误差
实型变量也是由有限的存储单元组成的,能提供的有效数字是有限的。这样就会存在舍入误差。看一个例子:
【例2.8】一个较大实数加一个较小实数。
main()
{
float x=7.24356E10, y;
            y=x+54;
printf("x=%e\n",x);
printf("y=%e\n",y);
}
程序执行的结果为:
x=7.24356E10
y=7.24356E10
这里x和y的值都是7.24356E10,显然是有问题的,原因是由于float只能保留6~7位有效数字,变量y所加的54被舍弃。因此由于舍入误差的原因,进行计算时,要避免一个较大实数和一个较小实数相加减。
5.实型数据的溢出
【例2.9】
main()
{
             float a,b,c,d;
a=1.2E33;
b=0.5E-22;
c=0.25E-21;
d=a/b;
d=d*c;
            printf("c=%f\n ",d);
      }
结果会出现
Floating point error: Overflow
这是由于程序中a/b的运算的结果超出了float型能表示的范围产生溢出。所以在使用中应避免直接用一个较大的数除以一个较小的数。可以将程序的计算部分d=a/b; d=d*c; 改为:
d=a*c; d=d/b; 或 d=a/b*c;
以避免这种情况的发生。也许有人会提出d=a/b*c为什么不产生溢出哪?其原因是,在Turbo C中float型数据在计算时要先转换为double型数据,计算后再转换为float型数据赋给float变量d。
2.4.3实训 使用实型数据
实训目的:正确书写实型常量,合理选择实型变量存放数据
实训内容
1、已知三角形的底为2.8cm,高为4.3cm,求三角型的面积。
编程如下:
main()
{float d=2.8,h=4.3, s;
s=d*h/2;
printf(“s=%f”,s);
}
程序运行的结果为:
s=6.020000
     2、将摄氏温度27.5度转换为华氏温度。转换公式为
编程如下:
main()
{
float f=27.5,c;
c=5.0/9*(f-32);
printf(“c=%f”,c);
}
程序运行的结果为:
c=-2.500000
3、上机验证1.0/7*7的结果是否为1.0。为什么?
阅读(3126) | 评论(0) | 转发(0) |
0

上一篇:“人的差别在于灵魂”

下一篇:C/C++试题

给主人留下些什么吧!~~