免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4528 | 回复: 7
打印 上一主题 下一主题

浮点数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-20 13:25 |只看该作者 |倒序浏览
本帖最后由 oanmo 于 2012-05-20 16:17 编辑

http://www.matrixq.net/2011/12/10475.html

所以S=0;M=1.01;E=-1。
但是IEEE对M和E的值还有一些特别的要求,比如M一定是一个大于1小于2的数因此开头的1可以省略,即实际中只保存小数点后面的部分M=01。32位浮点数中,留给M有23位,将第一位的1舍去以后,等于可以保存24位有效数字

IEEE754规定这个偏移量为2^(e-1)-1,e为存储指数的位元的长度,在32位浮点数中存储指数的域有8位因此偏移量位2^(8-1)-1=127。


问题:
float单精度浮点数:32位
double双精度浮点数:64位

一,"32位浮点数中,留给M有23位,将第一位的1舍去以后,等于可以保存24位有效数字"
   float单精度浮点数有32位,其中M规定是:23位,对否?
   如果这样,为什么“等于可以保存24位有效数字”,这句话是什么意思?
   
二,"在32位浮点数中存储指数的域有8位"
    float单精度浮点数有32位,其中E规定是:8位,对否?
     
三, float单精度浮点数,其二进制存储方式:
     符号位S(1位)+指数E(8位)+尾数M(23位)=32位,对否?

四,double双精度浮点数:64位,其二进制存储方式怎样?

五.long double扩展精度浮点数:是多少位,其二进制存储方式怎样?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
2 [报告]
发表于 2012-05-20 16:46 |只看该作者
本帖最后由 OwnWaterloo 于 2012-05-20 16:49 编辑

1. 对常用的10进制数,可以通过移动小数点并乘(除)10的幂得到原数,如12 = 1.2*10^1, 2.6 = 26*10^-1。
而对2进制数,每个位上的可能取值只有0或1。
如果再用上述方法将任意二进制数的小数点移动到首个非0位之后,得到 1.???? * 2^e 的形式,那小数部分的最高位始终是1 —— 不同于10进制,可能有1-9共9种可能 —— 那这个1就不需要存储空间。于是就不需要为其安排存储空间。有效位数=存储位数+1。

2,3. IEEE754的单精度是 1+8+23

4,5. IEEE754的双精度记得有53这个数字,至于是有效位数还是存储位数就不记得了……
如果是有效位数,那就是1+11+52,否则就是1+10+53。
扩展双精度请问google……

6. IEEE754的单精度、双精度、扩展双精度并不总是映射到C语言的float,double,long double。
C语言的float,double,long double并不总是分别映射到IEEE754的单精度、双精度、扩展双精度。

论坛徽章:
0
3 [报告]
发表于 2012-05-20 16:51 |只看该作者
回复 1# oanmo


    建议看看 计算机组成

论坛徽章:
0
4 [报告]
发表于 2012-05-21 10:57 |只看该作者
OwnWaterloo 发表于 2012-05-20 16:46
1. 对常用的10进制数,可以通过移动小数点并乘(除)10的幂得到原数,如12 = 1.2*10^1, 2.6 = 26*10^-1。
...


"有效位数=存储位数+1。"

解释下?

论坛徽章:
0
5 [报告]
发表于 2012-05-21 11:03 |只看该作者
回复 4# oanmo


    比如 1.11
    三位有效,但只需要记录后面两个1,因为反正前面大家都有个1,这个1因为事先约定好了,所以不需要记录

论坛徽章:
0
6 [报告]
发表于 2012-05-21 13:56 |只看该作者
本帖最后由 oanmo 于 2012-05-21 13:57 编辑
OwnWaterloo 发表于 2012-05-20 16:46
1. 对常用的10进制数,可以通过移动小数点并乘(除)10的幂得到原数,如12 = 1.2*10^1, 2.6 = 26*10^-1。
...



办细野!(请用白话说)

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
7 [报告]
发表于 2012-05-21 16:49 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2012-05-21 19:33 |只看该作者
本帖最后由 oanmo 于 2012-05-21 19:41 编辑
pmerofc 发表于 2012-05-21 16:49
2楼的解释已经够通俗了
5楼又给出了更通俗的解释
连这都看不懂



"4,5. IEEE754的双精度记得有53这个数字,至于是有效位数还是存储位数就不记得了……
如果是有效位数,那就是1+11+52,否则就是1+10+53。“

“有效位数=存储位数+1。”

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

不是说,有效位数=存储位数+1么。
为什么说,如果是有效位数,那就是1+11+52,否则就是1+10+53

答案模棱两可,什么来着?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP