zoukankan      html  css  js  c++  java
  • 浮点数如何表示,以及为什么会出现精度问题

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

     第一段占 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

  • 相关阅读:
    window/mac系统关机
    C++生成dump文件
    Qt词典搜索
    Qt将窗体变为顶层窗体
    MySql 分页
    JS之字符串与JSON转换
    简单的Map缓存机制实现
    WebSocket之获取HttpSession
    JSON格式之GSON解析
    Spring框架学习之IOC(二)
  • 原文地址:https://www.cnblogs.com/zxporz/p/13403522.html
Copyright © 2011-2022 走看看