IEEE浮点数标准

阅读笔记:Computer System : A Programmmer's Perspective

基本概念

IEEE浮点数标准采用

\[V=(-1)^s\times M\times2^E
\]

的形式表示一个数:

  • 符号:s决定数的正负

  • 尾数:M是一个二进制小数,范围是1~2-epsilon 或者 0~1-epsilon

  • 阶码:E的作用是对浮点数加权,权重为2的E次幂

下图为单精度(32位)与双精度(64位)的位示意图:

单精度:

  • s:1位
  • exp:k=8位
  • frac:n=23位

双精度:

  • s:1位
  • exp:k=11位
  • frac:n=52位

三个字段的编码:

  1. 单独的s直接编码符号s

  2. k位的阶码字段:

    \[exp=e_{k-1}e_{k-2}\cdots e_{1}e_{0}
    \]

编码E

  1. n位的小数字段:
    \[frac=f_{n-1}f_{n-1}\cdots f_{1}f_{0}
    \]

编码M

编码的三种情况

规范化值

当exp的位即不全为0也不全为1时(即单精度范围:1~254 双精度范围:1~2046),即为规范化的值。这种情况下,阶码字段可以被解释为以偏置量(bias)形式表示的有符号整数

\[E=exp-bias
\]

其中:exp即为阶码字段表示的值,并有

\[bias=2^{k-1}-1
\]

故对于单精度bias=127,双精度bias=1023,由此可得:

\[E=exp-127
\]

或者是:

\[E=exp-1023
\]

因此指数的范围:

\[E\in [-126,127]
\]

或者是:

\[E\in [-1022,1023]
\]

小数字段被解释为描述小数值f,0≤f<1,即:

\[f=\sum_{i=0}^{n-1}f_i*2^{i-n}
\]

尾数定义为:

\[M=1+f
\]

非规范化值

当阶码域全为0时,表示的数是非规范化的,此时的阶码为

\[E=1-bias
\]

故E=-126(单精度)或者E=-1022(双精度)而尾数:

\[M=f
\]

同理0≤f<1,即:

\[f=\sum_{i=0}^{n-1}f_i*2^{i-n}
\]

用途:

  • 表示数值0
  • 表示非常接近0的数

特殊值

  1. 无穷大

阶码全为1且小数字段全为0,根据符号位表示±∞

  1. NaN

阶码全为1且小数字段不全为0,这不是一个数(Not a Number)

总结

值的表示:

\[V=(-1)^s\times M\times2^E
\]

单精度:

  1. 规范值:

    E=exp-bias

    bias=127

    M=1+f

  2. 非规范:

    E=1-bias=-126

    bias=127

    M=f

双精度:

  1. 规范值:

    E=exp-bias

    bias=1023

    M=1+f

  2. 非规范值

    E=1-bias=-1022

    bias=1023

    M=f

示例

Q1.将-3.33333333转换为单精度表示

首先,将这个小数转化为二进制的小数形式(利用×2法)

\[-3.33333333_{10}=-11.010101010101..._{2}
\]

规范化:

\[-3.33333333_{10}=-1.1010101010101..._{2}\times2^1
\]

因此:

\[s=1
\]
\[exp=E+bias=1+127=128_{10}=1000 0000_{2}
\]
\[M=1.1010101010..._2\Rightarrow f=1010101010..._2
\]

从而可以写出单精度表示

\[11000000010101010101010101010101_2=C0555555_{16}
\]

Q2.给出如图8位二进制数在IEEE标准的浮点格式

首先对于规范化值:

\[E=exp-bias=exp-7
\]

对于非规范值:

\[E=1-bias=-6
\]

可以写出如下表格:

IEEE浮点数标准的更多相关文章

  1. 浮点数在计算机中的表示(IEEE浮点数标准)

    转载自:https://wdxtub.com/2016/04/16/thin-csapp-1/

  2. 基于 IEEE 754 标准的 单精度浮点数计算方式 (未完成)

    def dec2bin(dec): if dec < 0: s = ' dec = dec * (-1) else: s = ' e = 127 dec = float(dec) r = int ...

  3. 打印一个浮点数组,会输出字符串"Hello, world“ & 浮点数的二进制表示(IEEE 754标准)

    #include <stdio.h> #include<stdlib.h> int main() { float a[3] = { 1143139122437582505939 ...

  4. 【算法】解析IEEE 754 标准

    目录结构: contents structure [-] 浮点数的存储过程 次正规数(Denormalized Number) 零(zero) 非数值(NaN) 无穷大(infinity) 除数为0. ...

  5. python 警惕 IEEE 754标准

    双精度浮点数格式,即IEEE 754标准 >>> 0.1+0.2 0.30000000000000004 >>> (0.1+0.2)==0.3 False > ...

  6. IEEE 754标准--维基百科

    IEEE二进制浮点数算术标准(IEEE 754) 是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用.这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denorm ...

  7. 计算机中如何表示数字-07IEEE754浮点数标准

    由于不同机器所选用的基数.尾数位长度和阶码位长度不同,因此对浮点数的表示有较大差别,这不利于软件在不同计算机之间的移植.为此,美国IEEE(电器及电子工程师协会)提出了一个从系统角度支持浮点数的表示方 ...

  8. IEEE浮点数float、double的存储结构

    众所周知,C的float.VB的Single都是32位浮点数变量类型(也叫单精度浮点数),C的double和VB的Double则都是64位的浮点数变量类型(也叫双精度浮点数).有些编译器还支持更屌的l ...

  9. IEEE 754标准

    IEEE 754-1985 was an industry standard for representing floating-point numbers in computers, officia ...

随机推荐

  1. Pytest里面的测试用例怎么进行前置准备和后置清理操作?

    Pytest处理前置后置有两种方式可以处理. 第一种是通过setup和teardown这样的方法去处理: 第二种是通过fixture来实现的.首先先定义fixture,然后在调用.定义fixture, ...

  2. APIO 2020 爆零记

    Day -3 这几天集训,貌似大家都没有把APIO放在心上... Day 0 试了下机(非官方选手)... 感觉界面还是比较清新,(至少吊打BZOJ一个数量级) (话说APIO2020中国镜像为什么还 ...

  3. 如何将别人Google云端硬盘中的数据进行保存

    查了好久终于知道! 如何将别人Google云端硬盘中的数据进行copy,而不是右键发现只有添加快捷方式 只要shift+z就可以保存了! 之后等我弄清楚怎么将别人家的云盘中的数据集导到colab再来详 ...

  4. wamp&花生壳 在本地搭建自己的网站

    1.wamp下载安装(2.49),按提示来. 唯一要注意的是默认端口为80,若80端口已被占用,修改apache配置文件httpd.conf(C:\wamp\bin\apache\apache2.4. ...

  5. 2、Django源码分析之启动wsgi发生了哪些事

    一 前言 Django是如何通过网络socket层接收数据并将请求转发给Django的urls层? 有的人张口就来:就是通过wsgi(Web Server Gateway Interface)啊! D ...

  6. Go语言如何像foreach一样有序遍历map

    目录 问题 解决 给key排序思路 开源实现 问题 Go语言的Map是无序遍历的,遍历一个map代码如下 package main import ( "fmt" ) func ma ...

  7. 第05组 Alpha冲刺 (4/6)(组长)

    .th1 { font-family: 黑体; font-size: 25px; color: rgba(0, 0, 255, 1) } #ka { margin-top: 50px } .aaa11 ...

  8. quic是干什么的?

    什么是quic? quic解决了什么问题?HTTP和QUIC QUIC :Quick UDP Internet Connections:是一种新的默认加密的互联网通信协议,它提供了许多改进,旨在加速H ...

  9. 响应式关系数据库处理R2DBC

    目录 简介 R2DBC介绍 项目依赖 创建ConnectionFactory 创建Entity Bean 初始化数据库 获取所有的用户 Prepare Statement 事务处理 WebFlux使用 ...

  10. 使用spring框架进行aop编程实现方法调用前日志输出

    aop编程 之使用spring框架实现方法调用前日志输出 使用spring框架实现AOP编程首先需要搭建spring框架环境: 使用Spring框架实现AOP工程编程之后,不需要我们去写代理工厂了,工 ...