• IEEE二进制浮点数算术标准学习


      看到有网上有个项目是要求将浮点数用二进制表示出来,需要用IEEE754标准,查了查维基和深入理解计算机系统,重新学习了一遍浮点数在计算机中的表示和内存中的存储,

    先简单的做个笔记,后面需要更深入的理解。

    IEEE754定义了四种表示浮点数的方式:单精度(32bit),双精度(64bit),延伸单精度(43bit以上),延伸双精度(79bit以上),后两者很少使用,这里讲的是前面两种。

    用二进制来表示浮点数分三个部分,以下都已32bit的单精度为例,双精度类似可以推算出来:

    三部分为:符号位(sign)、指数(exponent)、尾数(significand,存储二进制小数部分),下面是维基上的图:

    单精度浮点数中,sign为1bit,exponent为8bit,significand为23bit,三部分组成32bit。

    还有一个概念比较重要“指数偏移值”,在IEEE754中指浮点数表示中的指数域(exponent)的编码值为指数的实际值加上一个固定值,这个固定值的算法是2e-1 - 1

    在单精度浮点数中为128-1 = 127.

    小数部分定义是f=0.fn-1fn-2...f0,二进制小数点在最高有效位的左边,而有小数定义为M=1 + f,所以M表示成1.fn-1...f0,通过调整指数,使有效数M在1~2之间

    看一个例子8.25,

    转换成二进制表示1000.01 可以表示成 1.00001 *23

    所以指数E = 3 + 127 = 130

    所以8.25在内存中表示是:

    0 10000010 00001000000000000000000

    其中对于小数部分如何转换成二进制,可以按一下方式小数部分*2,取整数部分值(0或者1)

    ,然后继续取结果的小数部分*2,在取整数部分,一直循环,直到取得想要的位数,

    如0.25 *2 = 0.5, 整数部分为0,然后0.5*2=1.0,整数部分为1,所以二进制表示为0.0100000..00

    指数的取值范围是从-126~127,所以当一个浮点数如0.25,时可以表示成1.000*2-2

    所以指数偏移值为-2 + 127=125

     在内存中表示是

    0 01111101 00000000000000000000000

    以上都是浮点表示中规格化值的用法,其他还有非规格化和特殊值两种,以后再补充。

  • 相关阅读:
    Eclipse安装常用离线插件
    Eclipse添加Maven、Jdk、Tomcat
    每天总结模电-去耦电容(一)
    4K显示器含义
    c语言的学习方法
    悲伤逆流成河读后感
    晶体管(三极管,场效应管,MOS以及CMOS)的区别
    强电的元器件认识
    ElasticSearch
    DataGrip
  • 原文地址:https://www.cnblogs.com/yemeng/p/4678834.html
Copyright © 2020-2023  润新知