cs61c笔记-Lecture6 floating points浮点数
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浮点数相关推荐
- 【廖雪峰python入门笔记】整数和浮点数
1. 区分整数和浮点数的原因 Python的整数运算结果仍然是整数,浮点数运算结果仍然是浮点数. 整数和浮点数混合运算的结果则变成了浮点数. 1 + 2.0 # ==> 浮点数 3.0 为什么要 ...
- FPGA学习笔记(2):半精度浮点数乘法器和半精度浮点数加法器的Verilog实现
开发环境 1.Vivado 2019.2 2.仿真:Vivado Simulater 半精度浮点数介绍 IEEE754-2008包含一种"半精度"格式,只有16位宽.故它又被称之为 ...
- 数值分析笔记 - L2 - Floating Point Arithmetic(国外资料)
目录 1. Finite precision number systems 有限精度数字系统 1.1 Issues 问题 2. Normalised systems 规格化系统 2.1 A gene ...
- 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 ...
- 计算机组成原理学习笔记:定点数、浮点数、原码、反码、补码、移码
定点数与浮点数 所谓定点数就是指小数点的位置固定不变 而浮点数是小数点的位置是不固定的,会浮动 1 ) 定点数 用熟悉的十进制数来类比,定点数就是我们平时更习惯使用的常规的计数方式,我们会显式的标明小 ...
- 软考笔记(3)——浮点数
文章目录 1.讲解 1.1 浮点数 1.2 如何对阶 1.3规范化浮点数范围 2.写题 1 2 3 4 5 6 7 8 1.讲解 1.1 浮点数 浮点数:类似科学计数法那种就是浮点数.做运算时,小数点 ...
- 【随写笔记】定点数和浮点数
对于标准C来说,是没有定点数这个概念的.(定点数来源于dsp?)但对于ARM架构的处理器来说,编译器提供浮点运算的软件实现,FPU提供硬件实现. 浮点数的格式: 单精度浮点:[31] 1位符号 [30 ...
- Games101笔记——Lecture6:Rassterization 2(Antialiasing and Z-Buffering)
Lecture6:Rassterization 2(Antialiasing and Z-Buffering) 今天讲完光栅化的内容: 反走样 采样理论 实践中的反走样 深度缓冲 今天涉及信号处理的内 ...
- IDEA笔记1(标识符 浮点数 转义字符)
打开项目结构,保证SDK与项目语言等级一致. //单行注释 /* 多行注释 */ /*** * .,:,,, .::,,,::. * .::::,,;;, .,;;:,,....:i: * :i,.: ...
- 论文笔记 Reinforced Feature Points: Optimizing Feature Detection and Description for a High-Level Task
代码解读 介绍 \quad 文章的主要思路是使用SuperPint的预训练模型,使用旋转矩阵 R R R和平移矩阵 t t t对SuperPoint进行reinforcement learning, ...
最新文章
- 交流电流变换器 : SCT1013 特性测试
- gwt格式_GWT HTTP请求替代方案
- android 快传 源码_最新安卓仿茄子快传APP源码包括服务端源码Android开发快传类项目源码全套...
- akka actor父子监管的实现
- oracle数据库zenm怎么创建连接,oracle10g中怎么创建数据库连接
- java博弈,人机博弈小游戏(Java)
- 腾讯向开放原子开源基金会捐赠TencentOS tiny、TKEStack两大项目!
- 一行代码扫出“敬业福”
- 使用GDAL对DEM渲染处理流程
- 百度远场语音识别套件-开箱评测
- 利用原生JS将下载链接转换为二维码
- mysql进阶教程pdf_SQL进阶教程 (MICK著) 高清pdf完整版
- 荣誉背后的故事:达内到底有多强?
- 教你查看sql server 2000 sp4补丁是否安装成功 (安装补丁后可以远程访问)
- .html页面缓存问题
- android电视手柄游戏,为游戏而生 Android TV的秘密武器露真容
- 怎样看股市K线图指标之成本均线指标CYC
- 年度催泪之作:2015中国程序员生存报告
- JAVA 下的 pgp加密解密示例
- ********随便看看**********
热门文章
- SAT数学解题方法介绍
- (轉貼) 馬英九特別費案起訴書全文 (News)
- web前端学习135-144(盒子模型---网页布局,盒子模型组成,边框,表格细线边框,盒子实际大小,内边距)
- 页面数据能够正常渲染,但控制台报错属性underfined
- JetBrain Clion下载安装及配置环境
- SDPT3 4.0版——半正定二次线性规划的Matlab软件
- Python图片文字提取
- 14年macmini装双硬盘_Mac mini 2014版(中配)更换固态硬盘
- C#隐藏任务管理器中进程 支持win10 win8.1 win7
- python绘制网格线在原图上面_在pyqtgraph中在图像上显示网格线