C语言有效位

来源:百度知道 编辑:UC知道 时间:2024/06/08 06:07:05
float的有效位为7位,这7位怎么算,包括小数点吗?是从小数点后面开始数7位,还是怎样?例如222223.523642566 输出是什么?

注意一下,float型,有效位数是7位,但是保留6位有效小数
所以222223.523642566 输出222223.523643(最后一位四舍五入)

对于大小为32-bit的浮点数(32-bit为单精度,64-bit浮点数为双精度,80-bit为扩展精度浮点数),
1、其第31 bit为符号位,为0则表示正数,反之为复数,其读数值用s表示;
2、第30~23 bit为幂数,其读数值用e表示(就是lz所说的有效位)
3、第22~0 bit共23 bit作为系数,视为二进制纯小数,假定该小数的十进制值为x;

则按照IEEE 754的规定,该浮点数的值用十进制表示为:
= (-1)^s * (1 + x) * 2^(e - 127)

对于49E48E68来说,
1、其第31 bit为0,即s = 0
2、第30~23 bit依次为100 1001 1,读成十进制就是147,即e = 147。
3、第22~0 bit依次为110 0100 1000 1110 0110 1000,也就是二进制的纯小数0.110 0100 1000 1110 0110 1000,其十进制形式为0.78559589385986328125,即x = 0.78559589385986328125。

这样,该浮点数的十进制表示
= (-1)^s * (1 + x) * 2^(e - 127)
= (-1)^0 * (1+ 0.78559589385986328125) * 2^(147-127)
= 1872333

对于把具体的浮点值写成机器表示的IEEE浮点数的形式,过程与上面相反。另外还有NaN(Not a Number),Inf(无穷),指数为0时的非规格化数等概念,需要查看IEEE 754 标准或《深入理解计算机》这本经典著作。

你理解错了,是二进制概念上的有效位,不是十进制。

你看看IEEE 754的标准就很清楚了。