沉默的背影 X-Pacific

keep learning

浮点数如何表示,以及为什么会出现精度问题

浮点数在计算机中也是用二进制表示的,只不过有一定规则(公式)

 

 

 第一段占 1bit,表示符号位。代称为 S(sign)。

第二段占 8bits,表示指数。代称为 E(Exponent)。

第三段占 23bits,表示尾数。代称为 M(Mantissa)。

 

 

 

对 3.14 这个小数进行表示
是正数。所以,S = 0
2^1 < 3.14 <2^2。所以,n=1, n+127 = 128。所以,E=128。
(3.14 - 2) / (4 - 2) = 0.57, 而 0.57*2^{23} = 4781506.56,四舍五入,得到 M = 4781507。因为有四舍五入,所以,产生了浮点数据的精度问题。
至此,根据小数3.14以及上面的公式算出了S E M

把 S、E、M 转成二进制,放入二进制位的三段得到 3.14 的二进制表示

 

 

 为什么会产生精度问题?

产生精度问题,其实是将二进制的3段变量重新带入公式,算出的结果与原值不同的问题

问题就出在,第一次计算M时就有了精度问题4781506.56四舍五入4781507

 

 

posted @ 2020-07-30 14:21  乂墨EMO  阅读(834)  评论(0编辑  收藏  举报