博客
关于我
深度剖析数据在内存中的存储(补充)
阅读量:794 次
发布时间:2019-03-25

本文共 1454 字,大约阅读时间需要 4 分钟。

浮点型在内存中的存储

浮点型是一种常见的数据类型,能够代表说大或小的数值。它的存储方式在计算机内部遵循IEEE 754标准,这为浮点数的表示提供了统一的规范。在近几十年来,尤其是随着计算机的普及,浮点型成为了程序设计中极为基础且重要的数据类型。

有效数字与指数的存储

浮点数主要由三个部分组成:

  • 符号位(Sign bit):决定数值是正数还是负数,当符号位为0时数值为正,符号位为1时数值为负。
  • 有效数字部分(Strictly fractional部分):存储决定数值大小的有效数字部分,IEEE 754标准规定,如果以二进制形式表示,有效数字的第一位总是会被舍去,以节省存储空间。这意味着有效数字的存储长度更短。
  • 指数位(Exponent):决定数值的有效位偏移幅度。对于32位浮点型,指数位占用8位。
  • IEEE 754标准详解

    按照IEEE 754标准,任意一个32位浮点数的存储模式可以表示为以下形式:

    [ V = (-1)^S \times M \times 2^E ]

    • S:符号位,当S=0时数值为正,S=1时数值为负。
    • M:有效数字部分,大小在1(包含)到2(不包含)之间。
    • E:指数部分,执行的是2的幂次运算。

    对于一个具体的浮点数值,通过这样的模型就可以将其转换为7-23位有效数字和指数值的组合。

    有效数字的存储优化

    为了使存储长度更加紧凑,IEEE 754有一个关键优化:

    • 当处理有效数字时,永远记录的第一位是紧随小数点后的数字的第一位。

    比如,当要存储的有效数字是101.23时,仅会存储10123,而不包括前面的1。之后在解析时,1会被自动补充回来。

    这种方法虽然节省了一个有效数字的存储位,但会对原始数值产生轻微的误差,偏差范围通常可以忽略不计。

    指数值的近似存储

    指数部分也是分别按照偏移量来存储的。对于32位浮点型,指数占8位,取值范围是0到255。但是,单独存储时,往往需要考虑的话可能超出了有效指数范围的一半。

    为了解决这个问题,IEEE 754选择使用一种"转换"方法:

    • 如果指数值是E,则实际存储的值为原始值加上中移值(bias)。具体来说:

    • 8位指数的中移值是127。

    • 11位指数的中移值是1023。

    在读取时,这个中移值就被减掉,从而得到了准确的指数值。

    特殊情况处理

    浮点型还有一些特殊情况需要注意:

  • 零点:如果指数部分的值为0,有效数字部分为0,则数值为0。

  • 无穷大:如果有效数字部分不为0,而指数部分的值为最大值(即全部位都为1),则数值为无穷大或负无穷大。

  • 不定值或零点附近误差(Denormalized numbers):如果指数部分全部为0,而有效数字部分不为0,则数值非常接近于零,这样的数值称为"不定值"。

  • 实例解析

    举个例子,数值5.5的浮点型存储如下:

  • 十进制的5.5,转换为二进制可写作:101.1。
  • 将其转换为科学计数法:1.011×2^2.
  • 符号位S=0,有效数字部分M=011,指数位E=2 + 127=129.
  • 二进制表示为:0 01000000000110000000000000.
  • 这里0表示符号位,01为有效数字的前半部分,129为指数部分。

    结论

    浮点型在内存中的存储方式采用了一种高效的编码方式。通过将数值的大小和位置信息分开存储,反而实现了一种更高效的数据表示方式。在实际应用中,正确理解和处理浮点型的存储方式至关重要,尤其当需要进行数值计算或者在内存中进行数值运算时。这不仅关系到程序的性能,也直接影响到计算结果的准确性。

    转载地址:http://uqeuk.baihongyu.com/

    你可能感兴趣的文章
    Mysql:SQL性能分析
    查看>>
    mysql:SQL按时间查询方法总结
    查看>>
    MySQL:什么样的字段适合加索引?什么样的字段不适合加索引
    查看>>
    MySQL:判断逗号分隔的字符串中是否包含某个字符串
    查看>>
    MySQL:某个ip连接mysql失败次数过多,导致ip锁定
    查看>>
    MySQL:索引失效场景总结
    查看>>
    Mysql:避免重复的插入数据方法汇总
    查看>>
    MyS中的IF
    查看>>
    M_Map工具箱简介及地理图形绘制
    查看>>
    m_Orchestrate learning system---二十二、html代码如何变的容易
    查看>>
    M×N 形状 numpy.ndarray 的滑动窗口
    查看>>
    m个苹果放入n个盘子问题
    查看>>
    n = 3 , while n , continue
    查看>>
    n 叉树后序遍历转换为链表问题的深入探讨
    查看>>
    N!
    查看>>
    N-Gram的基本原理
    查看>>
    n1 c语言程序,全国青少年软件编程等级考试C语言经典程序题10道七
    查看>>
    Nacos Client常用配置
    查看>>
    nacos config
    查看>>
    Nacos Config--服务配置
    查看>>