C语言中的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:假设那个3是-3,你存储负数时必须在首位一般要加一个符号,那么二进制-3=1000 0011,而1000 0011=131,电脑就会出错。所以电脑一般采用的是浮点数的补码进行运算,至于补码你可以看微机原理与接口技术。
2:不理解你的问题
3:举个例子八位小数0.1234567x,如果x<5时就是0.1234567,当x》5时就是0.1234568了,所以第七位不能保证。
4:如果你运算的是a+b+c和a+c+b那就会相等,而加了括号后优先级变化了,系统会先把括号里的计算结果处理保存起来在和括号外边的运算,这样由于精度问题就会有误差。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-05
这个你不用搞懂 这个叫偏移码 就是为了电脑方便计算 统一位数 就是加上一个2^n,这个n代表一个字节的位数 因为计算机都是二进制的 而且寄存器都是八位 所以都加上2的8次方
第2个回答  2012-03-05
规划vjmkvyhgvkjbnmv和vkjbnbmvhg

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网