zoukankan      html  css  js  c++  java
  • IEEE754标准

    造冰箱的大熊猫@cnblogs 2021/4/11

     

    IEEE754标准规定了浮点数二进制存储数据格式,详情请订阅IEEE标准[1]或网上搜索相关介绍文章[2],这里把程序员编程需要的关键信息小结一下:

     

    1、概述

    1)IEEE754标准对十进制浮点数如何转换为二进制格式做出了规定,是目前计算机广泛采用的工业标准。

    2)IEEE754标准的最新版本为2019版本,废止的版本包括1985和2008版本。

    3)IEEE754规定了32位和64位浮点数的数据格式(还有扩展型浮点数,绝大多数程序员不会用到,本文忽略),也就是常说的float(单精度)和double(双精度)型数据类型。

    2、float型浮点数

    1)采用32位二进制数存储浮点数。其中,

    • bit31为符号位。0~正,1~负。
    • bit[30:23]为指数部分。
    • bit[22:0]为尾数部分。

    2)指数部分=全1,尾数部分=全0,表示±无穷大(±Inf),正负号由符号位决定。

    3)指数部分=全1,尾数部分≠全0,表示NaNNot-a-Number)。NaN用于表示非数值结果,比如对负数开方(在实数域范围内是无解的)。NaN不区分正负。

    4)指数部分≠全1,也≠全0,此时的数值被称为normal number。对于normal number,可以理解为将一个实际数值用“以2为底的科学计数法”表示,即value = ±a×2n。其中,

    • ±为正负号,对应符号位。
    • a为位于[1,2)的实数,等于1.×××。将1省略,将0.×××以二进制形式表达(十进制0.5=2-1=二进制0.1,十进制0.25=2-2=二进制0.01),即为尾数部分。
    • n+127等于指数部分。
    • normal number的取值范围为[-(1-2-24)×2128, -2-126] + [2-126,(1-2-24)×2128]。

    5)指数部分=全0,此时的数值被称为subnormal number。与normal number类似,value = ±a×2-126。其中,

    • ±为正负号,对应符号位。
    • a为位于[0,1)的实数,等于0.×××。将0省略,将0.×××以二进制形式表达(十进制0.5=2-1=二进制0.1,十进制0.25=2-2=二进制0.01),即为尾数部分。
    • subnormal number的取值范围为[-(1-2-23)×2-126, (1-2-23)×2-126]。

     看完上面这几段,诸如float型数可存放的最大最小值、为什么某些浮点数无法用float型数据准确描述、float型数的有效位数(精度)等问题自然就弄明白了。

    3、double型浮点数

    emmmm,与float型类似:

    • 使用64位存储浮点数。
    • bit63为符号位。0~正,1~负。
    • bit[62:52]为指数部分。
    • bit[51:0]为尾数部分。
    • 对于normal number,n+1023等于指数部分,取值范围为[-(1-2-53)×21024, -2-1022] + [2-1022,(1-2-53)×21024]。
    • 对于subnormal number,value = ±a×2-1022,取值范围为[-(1-2-52)×2-1022, (1-2-52)×2-1022]。

    参考资料

    [1] IEEE 754-2019 - IEEE Standard for Floating-Point Arithmetic @ IEEE

    [2] IEEE754标准,连载五篇讲得比较细 @ 简书

  • 相关阅读:
    学生成绩判定系统
    A@2a139a55 结果产生的原因
    为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来?
    父类与子类之间构造方法的调用关系
    阅读《大道至简》第六章有感
    大数加法 待完善
    BigInteger大数加法源代码及分析
    随机数组求和
    读《大道至简》第五章“失败的过程也是过程 ”有感
    学习进度第15周
  • 原文地址:https://www.cnblogs.com/pandabang/p/14643529.html
Copyright © 2011-2022 走看看