floating points浮点数详解

  • 浮点数构成与储存
    • 浮点数构成
    • 浮点数的储存(以单精度为例)
  • 特殊的浮点数:区别Nan\Float\Infinity\denorm(以单精度为例)
    • 1.表示0
      • 表示方法
    • 2.表示+-∞
      • ∞的意义
      • 表示方法
    • 3.表示floating point浮点数
      • 表示方法
    • 4.表示denorm非规格化数
      • denorm的含义
      • 表示方法
    • 5.表示NaN(Not a Number)
      • 表示方法
      • NaN的作用

浮点数构成与储存

浮点数构成

浮点数又称floating point。为什么称浮点数呢?因为小数点是可以根据位数的不同而浮动的!
在说表达形式之前,请大家回忆一下科学计数法,eg. 1.2∗1021.2*10^21.2∗102.
同样,浮点数的表示就是二进制下的科学计数法表示:+1.xxx...x∗2yyy...y+1.xxx...x*2^{yyy...y}+1.xxx...x∗2yyy...y

浮点数的储存(以单精度为例)

根据以上的浮点数的二进制科学计数法表示,我们可以根据表达式组成结构将表达式分成不同的部分:
符号/s/sign: 表示正负
指数/e/exponent:表示指数位大小
小数位/significand:表示小数部分
在单精度下,
符号s占1bit
指数exponent占8bits
小数位significand占23bits

需要注意一点:
我们前面的二进制科学计数法表示是能包含巨大的范围,但是不能包含0
所以,我们需要留出空间来表示0,在IEEE754标准下,我们把exponent=0&significand=0的位(0/1 00000000 0000000000000000000000)用来表示0。因为+0和-0相同,所以有两个0(i.e.两个数字表示0)!

同时,考虑到需要表示正负两种位数,在IEEE754中用到了Bias Notation偏置表示:将指数exponent的值-偏置量126,即可表示 ±126的指数了。

可能有小伙伴会问:为什么不减去127呢?因为我们 留了一位用来表示0,所以对剩下的7位bit进行操作即可。

那么恭喜大家,得到了浮点数实际(偏置化后)表达式:

特殊的浮点数:区别Nan\Float\Infinity\denorm(以单精度为例)

以上是浮点数的一般式,那么对于一些特殊的数:我们该如何储存/表达呢?
首先,把答案告诉大家!
下面是一张分别以指数Exponent小数部分significand分类的数字图表和一张数轴形式的表示。


1.表示0

表示方法

如前文,我们把exponent=0,significand=0的数用来表示0。

2.表示±∞

∞的意义

当我们需要求最大值/最小值时,通常我们会定义一个变量用于比较,不妨令为MAX,那么MAX的初值自然就希望越小越好,这时 -∞就有了用武之地。

表示方法

IEEE754中,自然地令exponent=255, significand=0为 ±∞,正负体现在sign位的0/1:0为+1为负

3.表示floating point浮点数

表示方法

0和±∞的表示用掉了exponent=0和255的值,所以剩下的exponent就用来表示floating point,即把exponent=1~254,significand = anything用来表示浮点数floating point。

是不是觉得好像0和±∞的表示有些浪费空间:只限定了exponent=0/255,那其他的2232^{23}223个数位(significand)用来干嘛呢?
那么下面有意思的来了!!!

4.表示denorm非规格化数

denorm的含义

normalize是标准化,denorm就是去标准化的意思。
为什么要去标准化呢?因为之前的二进制科学计数法就是一种标准化,标准化后出现了问题!以1开头的标准化能表示的最小数a是:a=1.000...000∗2−126a=2−126a=1.000...000*2^{-126}\\a=2^{-126}a=1.000...000∗2−126a=2−126
第二小的数b是:
b=1.000...001∗2−126b=(1+2−23)∗2−126=2−126+2−149b=1.000...001*2^{-126}\\b=(1+2^{-23})*2^{-126}\\=2^{-126}+2^{-149}b=1.000...001∗2−126b=(1+2−23)∗2−126=2−126+2−149

这张图就形象地表示了这个问题:在0~a之间有一段距离,floating point 无法表示
怎么办?记不记得我们还有空余空间啊!那就用这些空间来表示这些用标准化/normalized的floating point无法表示的数,所以我们把这些数称之为denorm!

同时,注意到我们还剩2232^{23}223个数没有使用,这些正好可以填满 (-a,0)和(0,a) 之间的空隙。

不仅如此,这些denorm之间的间隔也是a/223=2−149a/2^{23}=2^{-149}a/223=2−149,和exponent=1时floating point的间距相同!

表示方法

把exponent=0,significand = nonzero/非零用来表示浮点数非规格化数denorm。

5.表示NaN(Not a Number)

表示方法

把exponent=255,significand = nonzero/非零用来表示浮点数非规格化数NaN。

NaN的作用

在编程中,可能会出现0/0,sqrt(-9) 这些错误,那我们怎么储存这个错误 对应的信息、错误在程序中出现的位置、错误出现在编译的哪个环节…等信息呢?智慧的floating point设计者Khan就把这些信息储存在NaN中,方便编译器为我们报错、debug

cs61c笔记-Lecture6 floating points浮点数相关推荐

  1. 【廖雪峰python入门笔记】整数和浮点数

    1. 区分整数和浮点数的原因 Python的整数运算结果仍然是整数,浮点数运算结果仍然是浮点数. 整数和浮点数混合运算的结果则变成了浮点数. 1 + 2.0 # ==> 浮点数 3.0 为什么要 ...

  2. FPGA学习笔记(2):半精度浮点数乘法器和半精度浮点数加法器的Verilog实现

    开发环境 1.Vivado 2019.2 2.仿真:Vivado Simulater 半精度浮点数介绍 IEEE754-2008包含一种"半精度"格式,只有16位宽.故它又被称之为 ...

  3. 数值分析笔记 - L2 - Floating Point Arithmetic(国外资料)

    目录 1. Finite precision number systems 有限精度数字系统 1.1 Issues 问题 2. Normalised systems 规格化系统 2.1  A gene ...

  4. python整数与浮点数混合运算输出结果为_笔记_004_整数和浮点数

    整数 Python 中,除 10 进制,还有其他三种进制: 0b 或 0B,二进制 0 1 0o 或 0O,八进制 0 1 2 3 4 5 6 7 0x 或 0X,十六进制 0 1 2 3 4 5 6 ...

  5. 计算机组成原理学习笔记:定点数、浮点数、原码、反码、补码、移码

    定点数与浮点数 所谓定点数就是指小数点的位置固定不变 而浮点数是小数点的位置是不固定的,会浮动 1 ) 定点数 用熟悉的十进制数来类比,定点数就是我们平时更习惯使用的常规的计数方式,我们会显式的标明小 ...

  6. 软考笔记(3)——浮点数

    文章目录 1.讲解 1.1 浮点数 1.2 如何对阶 1.3规范化浮点数范围 2.写题 1 2 3 4 5 6 7 8 1.讲解 1.1 浮点数 浮点数:类似科学计数法那种就是浮点数.做运算时,小数点 ...

  7. 【随写笔记】定点数和浮点数

    对于标准C来说,是没有定点数这个概念的.(定点数来源于dsp?)但对于ARM架构的处理器来说,编译器提供浮点运算的软件实现,FPU提供硬件实现. 浮点数的格式: 单精度浮点:[31] 1位符号 [30 ...

  8. Games101笔记——Lecture6:Rassterization 2(Antialiasing and Z-Buffering)

    Lecture6:Rassterization 2(Antialiasing and Z-Buffering) 今天讲完光栅化的内容: 反走样 采样理论 实践中的反走样 深度缓冲 今天涉及信号处理的内 ...

  9. IDEA笔记1(标识符 浮点数 转义字符)

    打开项目结构,保证SDK与项目语言等级一致. //单行注释 /* 多行注释 */ /*** * .,:,,, .::,,,::. * .::::,,;;, .,;;:,,....:i: * :i,.: ...

  10. 论文笔记 Reinforced Feature Points: Optimizing Feature Detection and Description for a High-Level Task

    代码解读 介绍 \quad 文章的主要思路是使用SuperPint的预训练模型,使用旋转矩阵 R R R和平移矩阵 t t t对SuperPoint进行reinforcement learning, ...

最新文章

  1. 交流电流变换器 : SCT1013 特性测试
  2. gwt格式_GWT HTTP请求替代方案
  3. android 快传 源码_最新安卓仿茄子快传APP源码包括服务端源码Android开发快传类项目源码全套...
  4. akka actor父子监管的实现
  5. oracle数据库zenm怎么创建连接,oracle10g中怎么创建数据库连接
  6. java博弈,人机博弈小游戏(Java)
  7. 腾讯向开放原子开源基金会捐赠TencentOS tiny、TKEStack两大项目!
  8. 一行代码扫出“敬业福”
  9. 使用GDAL对DEM渲染处理流程
  10. 百度远场语音识别套件-开箱评测
  11. 利用原生JS将下载链接转换为二维码
  12. mysql进阶教程pdf_SQL进阶教程 (MICK著) 高清pdf完整版
  13. 荣誉背后的故事:达内到底有多强?
  14. 教你查看sql server 2000 sp4补丁是否安装成功 (安装补丁后可以远程访问)
  15. .html页面缓存问题
  16. android电视手柄游戏,为游戏而生 Android TV的秘密武器露真容
  17. 怎样看股市K线图指标之成本均线指标CYC
  18. 年度催泪之作:2015中国程序员生存报告
  19. JAVA 下的 pgp加密解密示例
  20. ********随便看看**********

热门文章

  1. SAT数学解题方法介绍
  2. (轉貼) 馬英九特別費案起訴書全文 (News)
  3. web前端学习135-144(盒子模型---网页布局,盒子模型组成,边框,表格细线边框,盒子实际大小,内边距)
  4. 页面数据能够正常渲染,但控制台报错属性underfined
  5. JetBrain Clion下载安装及配置环境
  6. SDPT3 4.0版——半正定二次线性规划的Matlab软件
  7. Python图片文字提取
  8. 14年macmini装双硬盘_Mac mini 2014版(中配)更换固态硬盘
  9. C#隐藏任务管理器中进程 支持win10 win8.1 win7
  10. python绘制网格线在原图上面_在pyqtgraph中在图像上显示网格线