浮点数的表示和基本运算

浮点数的表示和基本运算

ID:9059367

大小:61.50 KB

页数:5页

时间:2018-04-16

浮点数的表示和基本运算_第1页
浮点数的表示和基本运算_第2页
浮点数的表示和基本运算_第3页
浮点数的表示和基本运算_第4页
浮点数的表示和基本运算_第5页
资源描述:

《浮点数的表示和基本运算》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、浮点数的表示和基本运算1浮点数的表示通常,我们可以用下面的格式来表示浮点数SPM其中S是符号位,P是阶码,M是尾数对于IBM-PC而言,单精度浮点数是32位(即4字节)的,双精度浮点数是64位(即8字节)的。两者的S,P,M所占的位数以及表示方法由下表可知SPM表示公式偏移量1823(-1)S*2(P-127)*1.M12711152(-1)S*2(P-1023)*1.M1023以单精度浮点数为例,可以得到其二进制的表示格式如下S(第31位)P(30位到23位)M(22位到0位)其中S是符号位,只有0和1,分别表示正负;P是阶码,通常使用移码表示(移码和补码只有符号

2、位相反,其余都一样。对于正数而言,原码,反码和补码都一样;对于负数而言,补码就是其绝对值的原码全部取反,然后加1.)为了简单起见,本文都只讨论单精度浮点数,双精度浮点数也是用一样的方式存储和表示的。2浮点数的表示约定单精度浮点数和双精度浮点数都是用IEEE754标准定义的,其中有一些特殊约定。(1)当P=0,M=0时,表示0。(2)当P=255,M=0时,表示无穷大,用符号位来确定是正无穷大还是负无穷大。(3)当P=255,M!=0时,表示NaN(NotaNumber,不是一个数)。当我们使用.NetFramework的时候,我们通常会用到下面三个常量Console

3、.WriteLine(float.MaxValue);//3.402823E+38Console.WriteLine(float.MinValue);//-3.402823E+38Console.WriteLine(float.Epsilon);//1.401298E-45//如果我们把它们转换成双精度类型,它们的值如下Console.WriteLine(Convert.ToDouble(float.MaxValue));//3.40282346638529E+38Console.WriteLine(Convert.ToDouble(float.MinValue))

4、;//-3.40282346638529E+38Console.WriteLine(Convert.ToDouble(float.Epsilon));//1.40129846432482E-45那么这些值是如何求出来的呢?根据上面的约定,我们可以知道阶码P的最大值是11111110(这个值是254,因为255用于特殊的约定,那么对于可以精确表示的数来说,254就是最大的阶码了)。尾数的最大值是11111111111111111111111。那么这个最大值就是:01111111011111111111111111111111。也就是2(254-127)*(1.1111

5、1111111111111111111)2=2127*(1+1-2-23)=3.40282346638529E+38从上面的双精度表示可以看出,两者是一致的。最小的数自然就是-3.40282346638529E+38。对于最接近于0的数,根据IEEE754的约定,为了扩大对0值附近数据的表示能力,取阶码P=-126,尾数M=(0.00000000000000000000001)2。此时该数的二进制表示为:00000000000000000000000000000001也就是2-126*2-23=2-149=1.40129846432482E-45。这个数字和上面的E

6、psilon是一致的。如果我们要精确表示最接近于0的数字,它应该是00000000100000000000000000000000也就是:2-126*(1+0)=1.17549435082229E-38。3浮点数的精度问题浮点数以有限的32bit长度来反映无限的实数集合,因此大多数情况下都是一个近似值。同时,对于浮点数的运算还同时伴有误差扩散现象。特定精度下看似相等的两个浮点数可能并不相等,因为它们的最小有效位数不同。由于浮点数可能无法精确近似于十进制数,如果使用十进制数,则使用浮点数的数学或比较运算可能不会产生相同的结果。如果涉及浮点数,值可能不往返。值的往返是指

7、,某个运算将原始浮点数转换为另一种格式,而反向运算又将转换后的格式转换回浮点数,且最终浮点数与原始浮点数相等。由于一个或多个最低有效位可能在转换中丢失或更改,往返可能会失败。4将浮点数表示为二进制4.1无小数的浮点数转换成二进制表示首先,我们用一个不带小数的浮点数来说明如何将一个浮点数转换成二进制表示。假设要转换的数据是45678.0f。在处理这种不带小数的浮点数时,直接将整数部分转化为二进制表示:1011001001101110.0,这时要加上一位默认的1(这是因为按照浮点数规格化的要求,尾数必须化成1.M的格式),那么可以表示成:11011001001101

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。