浮点数(单精度浮点数与双精度浮点数)在计算机中的存储

上传人:s9****2 文档编号:469239394 上传时间:2023-04-29 格式:DOC 页数:8 大小:95KB
返回 下载 相关 举报
浮点数(单精度浮点数与双精度浮点数)在计算机中的存储_第1页
第1页 / 共8页
浮点数(单精度浮点数与双精度浮点数)在计算机中的存储_第2页
第2页 / 共8页
浮点数(单精度浮点数与双精度浮点数)在计算机中的存储_第3页
第3页 / 共8页
浮点数(单精度浮点数与双精度浮点数)在计算机中的存储_第4页
第4页 / 共8页
浮点数(单精度浮点数与双精度浮点数)在计算机中的存储_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《浮点数(单精度浮点数与双精度浮点数)在计算机中的存储》由会员分享,可在线阅读,更多相关《浮点数(单精度浮点数与双精度浮点数)在计算机中的存储(8页珍藏版)》请在金锄头文库上搜索。

1、浮点数在计算机中的存储十进制浮点数格式:浮点数格式使用科学计数法表示实数。科学计数法把数字表示为系数(coefficient)(也称为尾数(mantissa),和指数(exponent)两部分。比如3.684*10人2.在十进制中,指数的基数为10,并且表示小数点移动多少位以生成系数。每次小数点向前移动时,指数就递增;每次小数点向后移动时,指数就递减。例如,25.92可表示为2.592*10人1,其中2.592是系数,值10人1是指数。必须把系数和指数相乘,才能得到原始的实数。另外,如0.00172可表示为1.72*10人-3,数字1.72必须和10人-3相乘才能获得原始值。二进制浮点格式:计

2、算机系统使用二进制浮点数,这种格式使用二进制科学计数法的格式表示数值。数字按照二进制格式表示,那么系数和指数都是基于二进制的,而不是十进制,例如1.0101*2人2.在十进制里,像0.159这样的值,表示的是0+(1/10)+(5/100)+(9/1000)。相同的原则也适用二进制。比如,1.0101乘以2人2后,生成二进制值101.01,这个值表示二进制整数5,加上分数(0/2)+(1/4)。这生成十进制值5.25。下表列出几个二进制小数以及它们对应的十进制值:二进制十进制分数十进制值0.11/20.50.011/40.250.0011/80.1250.00011/160.06250.000

3、011/320.031250.0000011/640.015625几个二进制浮点例子:二进制十进制分数十进制值10.1012+1/2+1/82.62510011.00119+1/819.12510110.110122+1/2+1/4+1/1622.81251101.01113+1/4+1/813.375编写二进制浮点值时,二进制通常被规格化了。这个操作把小数点移动到最左侧的数位,并且修改指针进行补偿。例如1101.011变成1.101011*2人3浮点数的存储IEEE标准754浮点数标准使用3个成分把实数定义为二进制浮点值符号有效数字指数符号位表示值是负的还是正的。符号位中的1表示负值,0表示

4、正值。有效数字部分表示浮点数的系数(coefficient)(或者说尾数(mantissa)。系数可以是规格化的(normalized),也可以是非规格化的(denormalized)。所谓规格化,就是任何一个数的科学计数法的表示都可为l.xxx*2人n,既然小数点左边的一位都是1,就可以把这一位省略。单精度浮点数23bit的尾数部分,可表示的精度却为24位,道理就在这里。指数表示浮点数的指数部分,是一个无符号整数。因为指数值可以是正值,也可以是负值,所以通过一个偏差值对它进行置偏,及指数的真实值=指数部分的整数偏差值。对于32位浮点数,偏差值=127;对于64位浮点数,偏差值=1023.二进

5、制浮点格式浮点数的这3个部分被包含在固定长度的数据格式之内。IEEE标准754定义了浮点数的两种长度:32位单精度和64位双精度可以用于表示有效数字的位的数量决定精度。下图显示了两种不同精度类型的位布局:313023220指数有效数字单精度63625251指数斂数字浮点使用23位有效数字值。但是单精度浮,浮点格式假设有效数字的整数部分永远为1,并且不在有效数字值中使用它。这样实际上有效数字的精度达到了24位。指数使用8位值,它的范围从0255,称为移码指数,意思是必须从指数中减去一个数(称为偏移量或者是偏差值),对单精度浮点数而言,这个值是127。当指数是0和255时,指数由别的含义,因此实际

6、指数的范围是从-126到+127(二进制指数),这样整个浮点数的范围则为:(1.18*10人-381.0x2.-126至I3.40*10人381.11x2人127)。指数0和255用于特殊用途。如果指数从1变化到254,则由s(符号位)、e(指数)和f(有效数)来表示的数为:-1的s次幂是数学上的一种方法,意思是“如果s为0,则数是正的(因为任何数的0次幂等于1);如果s为1,则数是负的(因为-1的1次幂为-1)”。表达式的另一部分是1.f,意思是1后面为二进制小数点,再后面为23位的有效小数部分。它乘以2的幂,其中指数为内存中的8位移码指数减去127。注意,还有一种特殊的情况0:如果e等于0

7、,且f等于0,则数为0。通常,所有32位均为0则表示0。但是符号位可以是1,在这种情况下,数被解释为-0。-0可以表示一个很小的数,小到在单精度格式中不能用数字和指数来表示。尽管如此,它们然小于0。如果e等于0,且f不等于0,则数是有效的。但是,它不是规格化的数,它等于(-1)Lfx2-7注意,二进制小数点左边的有效数为0。如果e等于255,且f等于0,则数为正或负无穷大,这取决于符号s。如果e等于255,且f不等于0,该值被认为“不是一个数”,简写为NaN。NaN可以表示一个不知道的数或者一个无效操作的结果。Q:3.40*10人38是值怎么来的?A:在单精度浮点格式中可以表示的最大规格化的正

8、或负二进制数为:1.1111IH11I111H111I111IiwoX2l2?换算成10进制约等于:3.402823669e+38,这里1.111111近似为2,则2*2人127=2人128=3.402823669e+38.Q:1.18*10人-38的值是怎么来的?A:通常,单精度浮点格式中可以表示的最小规格化的正或负二进制数为:L()0()00000()0()00000()0()0000.woX2l2il换算成10进制就是:1.175494351e-38,也就是约等于1.18*10人-38。Q:单精度浮点24位换算为十进制后,为什么精度是7位?A:10位二进制数近似等于3位十进制数。也就是说

9、,若10位都置1(即十六进制为3FFh,十进制为1023),则它近似等于3位十进制都设置为9,即999。或者:这种关系表明按单精度浮点格式存放的24位二进制数大约与7位十进制数等效。因此,也可以说单精度浮点格式提供24位二进制精度,或大约7位十进制精度。可以这么设,一个2相当于10k次方,即10k=2。那么2的24次方2人24=10人24k。从10k=2可以知道k=Iog10(2)0.301。所以,2的24次方换算到十进制,相当于有24*log10(2)约等于7.2个精度。Q:262144.00和262144.01是一样的么?A:当然不是一样的!但是在计算机里,单精度的存储中,它们却是一样的!

10、看这两个数作为单精度浮点数时在计算机里是怎么存储的:两者被存储为同一个数字:。那这是为什么呢?原因是,规格化单精度浮点里,在小数点后有23位数,而1.000000会经过2人18次方的运算后小数点会往前移动18个,那么小数点后面就只剩下5位,这时即使是1/(2人5)=0.03125都要比0.01大,所以没办法,只能存为一样的数。那么上面的问题如何避免呢?答案是,使用双精度浮点数。双精度浮点数的指数偏移量为1023,即3FFh,所以,以这种格式存放的数为:(-1jSXLfx2心它具有与单精度格式中所提到适用于0、无穷大和NaN等情形相同的规则。3二)oX252个0最小的双精度浮点格式的正数或负数为

11、:(Ll.1;TWfJX2-最大的数为:52个I用十进制表示,它的范围近似为。10的3082.2250738585072014X101.7976931348623158X次幂是一个非常大的数,在1后面有308个十进制零。53位有效数(包括没有包含在内的那1位)的精度与16个十进制位表示的精度十分接近。相对于单精度浮点数来说这种表示要好多了,但它仍然意味着最终还是有一些数与另一些数是相等的。例如,140737488355328.00与140737488355328.01是相同的,这两个数按照64位双精度浮点格式存储,结果都是:42E0000000000000h可把它转换为:(.X247,2个0由上面可以看到,在双精度的浮点下,整数部分+小数部分的位数一共有17位。

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

当前位置:首页 > 办公文档 > 解决方案

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