与afreez一起学习DSP中浮点转定点运算--浮点数的存储格式

来源:互联网 发布:捷克语翻译软件 编辑:程序博客网 时间:2024/05/18 18:03

二:浮点数的存储格式

2.1 IEEE floating point standard

上面我们说了,浮点数的小数点是不固定的,如果每个人都按照自己的爱好存储在电脑里,那不就乱套了吗?那么怎么在计算机中存储这种类型的数字呢?象这类古老的问题前人早都为我们做好了相应的规范,无规矩不成方圆吗。我们平时所说的浮点数的存储规范,就是由IEEE指定的,具体的规范文件是:IEEE Standard 754 for Binary Floating-Point Arithmetic。大家可以很容易的从网络上下载到这篇文档。

下面,偶就大致的描述一下,感兴趣的“同志”们可以阅读原文。

--------------------------------------------------------

声明:
  此文为原创,欢迎转载,转载请保留如下信息
  作者:afreez 北京-中关村
  联系方式:afreez.gan@gmail.com (欢迎与作者交流)
  初次发布时间:2006-12-19

初次发布在: http://blog.csdn.net/ganxingming/ 

不经本人同意,不得用语商业或赢利性质目的,否则,作者有权追究相关责任!
---------------------------------------------------------

 

       c语言中,单精度(float)数据类型为32bits,具体的如下图所示:

 

整个32bits分三部分,即

       Sign:符号位,1 bit0为正,1为负;

       Exponent(bias):指数部分,8 bits,存储格式为移码存储(后面还会说明),偏移量为127

       Mantissa(fraction):尾数部分。

 

       对应的双精度(double)类型的格式为:

同样,64位也被分为了三部分,对照单精度,不用我说就可以理解各个部分的含义了吧?

       是不是有点迷糊了,不要怕,理论这个东西最能忽悠人了,看起来很高深,其实也就是个屁大的事,举个例子就很容易明白了。

举例说明,如3.24x103,则对应的部分为,Sign03为指数部分(注意计算机里面存储的不是3,这里仅仅为了说明),3.24为尾数。我们知道,计算机“笨”的要死,只认识01,那么到底一个浮点数值在计算机存储介质中是如何存储的呢?

例如,我们要想偷窥浮点类型的值4.25在计算机硬盘中存储的庐山真面目,请跟我来:首先把4.25转换成二进制的表达方式,即100.01,在详细点,变成1.0001x22,好了,对号入座把。

Sign=0;

Exponent(bias)=2+127=129(偏移量为127,就是直接加上个127了);

Mantissa=1.0001-1.0=0001(规格化后,小数点前总是整数1,全世界人都知道前面是1不是0,所以省略不写了,即尾数部分不包括整数部分;当别人问你,为什么23 bit的尾数部分可以表示24位的精度,知道怎么回答了吧。靠,什么,没有看懂,再仔细读两便就知道了)。

 

对照上面的图示,相信你已经看明白了吧?相信你的智商。为了加深认识,再来一个。如果给定你一个二进制数字串,01000000100010000000000000000000并告诉你这是一个float类型的值,让你说出它是老几,知道怎么算了吧?如果不知道,看下面的图,我就不废话解释了。

2.2深入理解浮点存储格式

为了更深入的理解浮点数的格式。我们使用C语言来做一件事。在C语言的世界里,强制类型转换,大家应该都很熟悉了。例如:

float f=4.6;

int i;

i = (int)(f+0.5); // i=5

..

下面我们不使用强制类型转化,我们自己来计算f转换成整形应该等于几?

把主要代码帖出来,如下:

 

//23+1位的尾数部分

int ival= ((*(int *)(&fval)) & 0x07fffff) | 0x800000;

// 提取指数部分

int exponent = 150 - (((*(int *)(&fval)) >> 23) & 0xff);

if (exponent < 0)

ival = (ival<< -exponent);

else

ival = (ival >> exponent);

// 如果小于0,则将结果取反

if ((*(int *)&fval) & 0x80000000)

ival = -ival;

 

好好琢磨琢磨吧,看明白了,就说明你基本明白了浮点数的存储格式,如果没有看明白,接着看,知道明白为止。

(未完,待续......)


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 香港购物退港怎么办? 香港购物后发票怎么办 浅色衣服被染色怎么办 工作调动不想去怎么办 被调到不好岗位怎么办 考试失败很难过怎么办 貔貅摔了一点点怎么办 电脑资源管理器停止工作怎么办 红警3锁集显怎么办 猛犸象牙吊坠裂了怎么办? 特别压抑的时候怎么办 孕妇吃腊肉了怎么办 怀孕吃了午餐肉怎么办 剩米饭太硬怎么办? 月经推迟量少怎么办 怎么办早餐吃了1000 乐扣盒子打不开怎么办 不锈钢饭盒盖子打不开怎么办 电压力锅打不开盖子怎么办 保温饭盒打不开了怎么办 玻璃饭盒加热后打不开怎么办 玻璃饭盒盖子盖不紧怎么办 狗狗耳朵臭怎么办 白色洗手池发黄怎么办 热水壶木塞有味怎么办 过滤水壶效果不好怎么办 喝咖啡睡不着觉怎么办 食品流通许可证过期怎么办 水产养殖水体发白怎么办 生存战争找不到食物怎么办 执法记录仪肩扣怎么办 极米h1s死机了怎么办 受到伪基站骚扰怎么办 车载蓝牙没声音怎么办 工程现场更改方案怎么办 qq没有语音输入怎么办 执法记录仪丢了怎么办 vivox20无ip分配怎么办 x20无ip分配怎么办 手机ipv4不可用怎么办 ip地址不可用怎么办