首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于float的存储,该怎么处理

2012-04-28 
关于float的存储1,指数E的存储为什么要加127,比如说某个浮点数转换为二进制后为1000.011.00001*10^3,直接

关于float的存储
1,指数E的存储为什么要加127,比如说某个浮点数转换为二进制后为1000.01=1.00001*10^3,直接存3不就完事了吗?干嘛还要 3+127=130再存进去,看了某篇文章说是移位存储,我查了下也没搞清楚是怎么回事,知道的请说说


2,浮点数不是规定E=0,F=0,即指数和尾数全为零时就表示0吗?那为什么float X与0比较还要用限定范围的那种方式,而不是直接if(x==0),因为我觉得你既然规定了0可以确切的被表示出来,那就可以用这种确定的比较方式,对吗?

3,我看到有人说这样一句话,float的精度为7位,但是绝对能保证的只有6位,不是很明白,望指教

4,对于确切两个浮点数 a+b 和 b+a 永远是等的,但是 (a+b)+c 和 (a+c)+b 就不一定了,为何?


[解决办法]
1. 否则全都是0对应的浮点数就不是0了
2. 不存在浮点数比较必须用范围。浮点数因为是有限小数,所以存在误差,但是误差只有在乘除运算过程中才会放大。
3. float的有效数字是1开始的24位2进制数,对应10进制一共8位,去掉一位不精确位,是7位。没有6位的说法。
4. 浮点数因为保留固定位有效数字,所以运算过程中会损失信息。
[解决办法]
1、计算机存储指数是用移码保存的;移码对于比较数大小很方便;而移码就要求必须是正的;

2、if(x==0 ),运算的时候会提升成浮点数,再比较不又出问题,所以,规定浮点数的另一种比较方式最佳;

3、这个说法很奇怪,浮点数能精确的数据肯定能精确,不能精确的打死也不能保证;没有LZ说的存在6和7的问题;

4、因为浮点数计算本身就是不精确的,所以,改变了运算次序,可能导致局部运算的数值有较大差距,导致
最后的结果不一致

热点排行