对浮点型范围的解释

C语言中float是32位,也就是由32个0或1表示的(对吧?)
分配给小数部分24位是怎么表示小数的,分配给指数部分的8位是怎么表示指数的?
数值范围 -3.4e-38到 3.4e38 中3.4是怎么来的?38是怎么来的?他们也不是2的多少次幂啊
书上写的有效数字6-7位,为什么不确定呢?
还有double 64位 有效数字15-16 数值范围 -1.7e-308到-1.7e308
longdouble 128位 有效数字18-19 数值范围 -1.2e-4932到-1.2e4932
也顺带着解释一下吧,谢了!
怎么给分啊?我新手,第一次问

你可能刚接触C语言吧。关于浮点数的表示这方面的问题,不属于高级语言编程的学习范围。

具体知识点,应该属于计算机组成原理(相当重要的一门计算机专业基础课)

如果楼主对我说的不太明白,可以参看组成原理第二章:数据的表示和运算。其中关于浮点数的表示一节。

为便于软件的移植,浮点数的表示格式应该有统一标准(定义)。1985年IEEE(Institute of Electrical and Electronics Engineers)提出了IEEE754标准。该标准规定基数为2,阶码E用移码表示,尾数M用原码表示,根据原码的规格化方法,最高数字位总是1,该标准将这个1缺省存储,使得尾数表示范围比实际存储的一位。实数 的IEEE754标准的浮点数格式为:
具体有三种形式:
IEEE754三种浮点数的格式参数
类型 存储位数 偏移值
数符(s) 阶码(E) 尾数(M) 总位数 十六进制 十进制
短实数(Single,Float) 1位 8位 23位 32位 0x7FH +127
长实数(Double) 1位 11 位 52位 64位 0x3FFH +1023
临时实数(延伸双精确度,不常用) 1位 15位 64位 80位 0x3FFFH +16383

对于阶码为0或为255(2047)的情况,IEEE有特殊的规定:
如果 E 是0 并且 M 是0,这个数±0(和符号位相关) 如果 E = 2 − 1 并且 M 是0,这个数是 ±无穷大(同样和符号位相关) 如果 E = 2 − 1 并且 M 非0,这个数表示为不是一个数(NaN)。
标准浮点数的存储在尾数中隐含存储着一个1,因此在计算尾数的真值时比一般形式要多一个整数1。对于阶码E的存储形式因为是127的偏移,所以在计算其移码时与人们熟悉的128偏移不一样,正数的值比用128偏移求得的少1,负数的值多1,为避免计算错误,方便理解,常将E当成二进制真值进行存储。例如:将数值-0.5按IEEE754单精度格式存储,先将-0.5换成二进制并写成标准形式:-0.510=-0.12=-1.0×2-12,这里s=1,M为全0,E-127=-1,E=12610=011111102,则存储形式为:
1 01111110 000000000000000000000000=BE00000016
这里不同的下标代表不同的进制。

公式

在单精度时:
V=(-1)^s*2^(E-126)*M
在双精度时:
V=(-1)^s*2^(E-1022)*M
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-12-21
其实我感觉你有点钻牛角尖了

这个问题没啥实在意义

主要还是多写程序 多看程序 在这个小问题上 耽误时间 我觉得没必要

个人看法
主要还是自己平时多打打代码 这个问题 具体编程中 根本碰不到
第2个回答  2009-12-22
对于float
尾数规定是整数位为1,小数位用24位,所以只记录小数位。所以最多可以记录2^24=16777216,也就是说1.16777216这样已经是最大精度了,所以只能有6-7位精度。
指数部分8位,8位数,最大255。255就是最大的可能指数,底数是2。也就是2^256=1.1579208923731619542357098500869e+77
相似回答