- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实型数据在内存中的存放形式
实型数据在内存中的存放形式
2007-09-06 16:23:52
转载
标签: 实型变量
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 1XXXXXXXXXX000000000000 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。为什么?
文档评论(0)