永发信息网

C语言中的float存储问题,请尽量详细解答,谢谢

答案:3  悬赏:70  手机版
解决时间 2021-03-03 07:10
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那就会相等,而加了括号后优先级变化了,系统会先把括号里的计算结果处理保存起来在和括号外边的运算,这样由于精度问题就会有误差。
全部回答
float存储方式是由ieee来规定的 存储分为三个部分: 符号位(sign) : 0代表正,1代表为负 ---------1位 指数位(exponent):用于存储科学计数法中的指数数据,并且采用移位存储 --------8位 尾数部分(mantissa):尾数部分 ----------23位 ieee规定: 指数偏移值是指浮点数表示法中的指数域的编码值为指数的实际值加上某个固定的值,该固定值为 2e-1 - 1,其中的e为存储指数的位元的长度。 以单精度浮点数为例,它的指数域是8个位元,固定偏移值是2^(8-1) - 1 = 128−1 = 127. 单精度浮点数的指数部分实际取值是从128到-127。例如指数实际值为1710,在单精度浮点数中的指数域编码值为144, 即144 = 17 + 127. 科学计数法的表示为1.xxx*(2^n),尾数部分就可以表示为xxx,第一位都是1,干嘛还要表示呀?可以将小数点前面的1省略,所以23bit的尾数部分,可以表示的精度却变成了24bit。而十进制里面每一位是用二进制的4位来表示的,所以24bit的精确度就是24/4 = 6 :) 一个规格化的单精度浮点数x的真值为x=((-1)^s)*(1.m)*(2^(e-127)) 对于计算机中32bit表示的浮点数,表示的术的绝对值的范围约为(1e-38)~(1e+38),即2^(-127)~1.
这个你不用搞懂 这个叫偏移码 就是为了电脑方便计算 统一位数 就是加上一个2^n,这个n代表一个字节的位数 因为计算机都是二进制的 而且寄存器都是八位 所以都加上2的8次方
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
关于三相交流发电机的问题 我拿验电笔去测量
气功运气,怎么样运气
土伏苓有什么功效?
张姐烤肉拌饭脆皮鸡饭(六中店)地址在什么地方
近代以来中国的先进思想,在中华民族为独立和
什么游戏赢话费最容易 最容易赢话费的游戏
后葛屯中桥地址在哪,我要去那里办事
两个人感情破裂,必须得离,男方总拖着,又不想
1986年冬月二十四五行属什么命?
如图,两条对角线把梯形分割成四个三角形,已知
公司招了个员工信仰基督教,工作时间宣传宗教
请问我09年购入的迈腾1.8T手动舒适版。一直放
狗狗流黑血怎么办这狗流了一个多月了血这两天
维纳斯摄影地址有知道的么?有点事想过去
广汽传祺的方向盘汽囊怎么拆
推荐资讯
苏东坡是谁的超级粉丝
如何给省纪委发举报信
最小二乘法进行多元线性回归的分析的假定条件
属狗1994年冬月二十八早上五点出生的女孩
为什么我的手机是4G的运行额用了两天还有两个
我和他彼此都有家庭了,可是他说他爱我会对我
两条长度相同的纬线可以组成一个纬线圈,对吗
别人转钱到支付宝怎麼转到馀额宝
香蜜湖公寓B座在哪里啊,我有事要去这个地方
我是湖北户口,可以把户口迁到上海亲戚 家吗
从广州到厦门理工学院
做面包时加入一些酵母菌,是因为酵母菌可以将
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?