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

如题所述

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.11111111b*(2^128),浮点数的绝对值再怎么小,也不可能小过2^(-127),浮点数中不存在绝对0,所以我们只能取近似值
对于第四问来说,因为在进行浮点数操作时会有四舍五入的操作
举个例子
如果a+b最后大于5则最后一位+1,然后再加上c最后结果还大于5再+1
这样一共加了两次
但是a+c可能最后小于5,然后再加上b才大于5
这样一共只加了一次
所以。。。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-30
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那就会相等,而加了括号后优先级变化了,系统会先把括号里的计算结果处理保存起来在和括号外边的运算,这样由于精度问题就会有误差。
第2个回答  2019-04-12
规划vjmkvyhgvkjbnmv和vkjbnbmvhg

相关了解……

你可能感兴趣的内容

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