实型数据在内存中的存放形式

上传人:人*** 文档编号:458966471 上传时间:2024-02-13 格式:DOCX 页数:3 大小:11.56KB
返回 下载 相关 举报
实型数据在内存中的存放形式_第1页
第1页 / 共3页
实型数据在内存中的存放形式_第2页
第2页 / 共3页
实型数据在内存中的存放形式_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《实型数据在内存中的存放形式》由会员分享,可在线阅读,更多相关《实型数据在内存中的存放形式(3页珍藏版)》请在金锄头文库上搜索。

1、实型数据在内存中的存放形式(2007-09-06 16:23:52)转载Q标签:学习公社实型变量1. 实型数据在内存中的存放形式实型数据一般占4个字节(32位)内存空间。按指数形式存储。实数3.14159在内存中的存放形式如 下:+.314159+1数符小数部分指符 指数小数部分占的位(bit)数愈多,数的有效数字愈多,精度愈高。指数部分占的位数愈多,则能表示的数值范围愈大。实际上,小数部分是一个二进制纯小数,指数部分以补码存放。2. 实型变量的分类实型变量分为:单精度(float型)、双精度(double型)和长双精度(long double型)三类。在Turbo C中单精度型占4个字节(3

2、2位)内存空间,其中数符1位,小数部分23位,指符1位, 指数7位,所以其数值范围为3.4E-383.4E+38,只能提供67位有效数字。双精度型占8个字节(64 位)内存空间,其中数符1位,小数部分23位,指符1位,指数10位,其数值范围为1.7E-3081.7E+308, 可提供1516位有效数字。表2.2类型说明符比特数(字节数)有效数字数的范围Float32 (4)6710-371038Double64(8)151610-307 10308long double128(16)181910-4931 1049323. 实型变量的定义形式及初始化与整型相同。类型说明符:float (单精度

3、实型),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.8125X10-2为例,其数据存储的格式如下0 101000000000000000000001 0000011数符 小数部分(23位)指符 指数(7位)即二进制的0.101X10-11,转化为十进制为0.625X2-3,即7.8125X10-2。对于doub

4、le型的数据小数部占53位(包括数符一位),指数部分占11位(包括指符一位)。对于long double型的数据小数部分占113位(包括数符一位),指数部分占15位(包括指符一 位)。4. 实型数据的舍入误差实型变量也是由有限的存储单元组成的,能提供的有效数字是有限的。这样就会存在舍入误差。看一个例 子:【例2.8】一个较大实数加一个较小实数。 main()float x=7.24356E10, y;y=x+54;printf(x=%en”,x);printf(y=%en”,y);程序执行的结果为:x=7.24356E10y=7.24356E10这里x和y的值都是7.24356E10,显然是有

5、问题的,原因是由于float只能保留67位有效数字,变 量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=%fn ”,d);结果会出现Floating point error: Overflow这是由于程序中a/b的运算的结果超出了 float型能表示的范围产生溢出。所以在使用中应避免直接 用一个较大的数除以一个较小的数。可以将程序的计算部分d=a/b; d=d*c;改为:

6、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.0200002、将摄氏温度27.5度转换为华氏温度。转换公式为编程如下:main()float f=27.5,c;c=5.0/9*(f-32);printf(“c=%f”,c);程序运行的结果为:c=-2.5000003、上机验证1.0/7*7的结果是否为1.0。为什么?

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号