浮点数在计算机中的存储方式

所需积分/C币:50 2012-02-14 13:43:59 123KB PDF
收藏 收藏 1
举报

C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?如果胡乱分配,那世界岂不是乱套了么,其实不论是float还是double在存储方式上都是遵从IEEE的规范的,float遵从的是IEEE R32.24 ,而double 遵从的是R64.53。无论是单精度还是双精度在存储中都分为三个部分: • 符号位(Sign) : 0代表正,1代表为负 • 指数位(Exponent):用于存储科学计数法中的指数数据,并且采用
11011n@*中中@中 13 11五1 中 1卫 那么如果绘出内存中一段数据,并且告诉你是单精度存储的话,你如何知道该数据的十进制数值呢?其实 就是对上面的反推过程,比如绘出如下内存数据: 首先我们现 将该数据分段, 在内存中的存储就为下图所示 中1P即P1 1T1H即配 根据我们的计算方式,可以计算出,这样一组数据表示为 而双精度浮点数的存储和单精度的存储大同小异,不同的是指数部分和尾数部分的位数。所以这里不两详 细的介绍双精度的存储方式了,只将 的最后存储方式图给出,大家可以仔细想想为何是这样子的 中即中团 1Mn1P即即贮即即即P 下面我就这个基诎知识点来解决一个我们的一个疑惑,请看下面一段程序,注意观察输出结果 可能输岀的结果让大家疑惑不解,单精度的转換为双精度后,精确到小数点后位后变为了 ,而单精度的转换为双精度后,变为了 为何在转换后的 数值更改了而却没有更改呢?很奇怪吧?其实通过上面关于两种存储结果的介绍,我们已经大概能 找到答案。首先我们看看的单精度存储方式,很简单 而 的双精度表示为 这样在进行强制转换的时候,数值是不会变的,而我们再 看看呢,用科学计数法表小应该为:将十进制的小数转换为二进制的小数的方法为将小数,取 整数部分,所以 ,所以二进制小数第一位为的整数部分 第二位为 第三位为 第四位为 第五位为,这样永远也不可能乘到 ,得到的二进制是一个无限循环的排列 对丁单精度数据来说,尾数 只能表示的精度,所以的存储为 中神且1工障工工⊥中 但是这样存储方式,换算成十进制的值,却不会是的,应为十进制在转换为二进制的时候可能会不准 确,如,而 类犁的数据也存在同样的问题,所以在浮点数表示中会产生些许的误差,在单精 度转换为双精庋的时候,也会存在误差的问题,对于能够用进’表示的十进制数据,如,这个误差 就会不存在,所以会出现上面比较奇怪的输出结果 本文属作者原创,只发布在博客园,希望大家在转载的时侯,注明屮处和作者,谢谢。 注:本文在写作过程中,参照了如下资料: 作者: 出处 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章面明显位置给 出原文连接,否则俣留追究法律责任的权利。 请您对文章做出评价 上:一篇:构建安全的 系列之之错误代码详解 下一篇:软件设计和开发规范(国标) 阅读 评论 编辑收藏所属分类系统 架构算法 发表评

...展开详情
试读 5P 浮点数在计算机中的存储方式
立即下载 低至0.43元/次 身份认证VIP会员低至7折
    抢沙发
    一个资源只可评论一次,评论内容不能少于5个字
    关注 私信 TA的资源
    上传资源赚积分,得勋章
    最新推荐
    浮点数在计算机中的存储方式 50积分/C币 立即下载
    1/5
    浮点数在计算机中的存储方式第1页
    浮点数在计算机中的存储方式第2页

    试读已结束,剩余3页未读...

    50积分/C币 立即下载 >