double的结构

符号位1+阶数位8+尾数位23

阶数位的取值范围为-126到127,尾数位隐藏了小数点左侧首位1,只表示小数点后各位,故而真值取值[1, 2)

综合两者,对应的十进制为1.17549435E-38f3.4028235e+38f   //1×2^-126到2×2^127

有效数字6到7位,

1>尾数1.0,阶数0

2>尾数1.0,阶数1

如何确定有效数字位数?

考虑任意一个6位有效数字的数,比如6.85456×10^16需要证明,当尾数末位+1时,增量小于0.00001×10^16

证明:尾数末位是小数点后第23位,+1后增量为1/2^23=0.0000001192,可是我们不知道阶数对应的幂次(不能简单认为是10^16

emmmmm算了pass,这个不重要

 

 

尾数第一位永远是隐藏的1

 

1e12无法精确表示,因为其转化为2进制后,有效数字超过了24位(之所以是24因为算入的默认的首位1),这里注意它不是1位有效数字,是13位

只要有效数字少于6,都可以精确表示

而有效数字大于6的一部份数,也可以精确表示。因为有效数字少于6的数一共有899998个,小于2^23=8388608。事实上7位有效数字都可以差不过覆盖了,所以说有效数字6到7位

 

在内存中以真值+0111_1111方式存储阶数

为一种特殊的移码。0和256用于存储特殊情况,如0、无穷大和非数NAN

且因移码,无符号位一说

posted @ 2022-04-28 14:30  FKcode  阅读(263)  评论(0)    收藏  举报