[学习笔记] 二进制小数表示方法
文章目录
- 科学计数法
- 二进制推广
- 计算机中的小数
- EXCESS表示系统
- 特殊情况
- 举例(float)
- 普通情况最大正实数
- 普通情况最小负实数
- 普通情况最小正实数
- 特殊情况最大正实数
科学计数法
科学计数法想必大家都很熟悉了,往往通过如下形式表示一个实数:
± M × R E \plusmn M \times R^E ±M×RE
其中包含几个组成部分:
- 符号(sign):最左边的正负号;
- 尾数(fraction)、有效位数(significand):公式中的 M M M,常常是1到10之间的小数,体现了数字的精度;
- 基数(radix):公式中的 R R R,表示进制,科学计数法使用的就是十进制,即 R = 10 R=10 R=10;
- 指数(exponent):公式中的 E E E
比如一个十进制数字通过科学计数法表示为: 2.99792458 × 1 0 8 2.99792458 \times 10^8 2.99792458×108。而对于这种形式表示的任意一个十进制数字 d 1 . d 2 d 3 . . . d n × 1 0 E d_1.d_2d_3...d_n \times 10^E d1.d2d3...dn×10E,实际上都可以展开来计算具体的值: d 1 × 1 0 E + d 2 × 1 0 E − 1 + d 3 × 1 0 E − 2 + . . . + d n × 1 0 E − n + 1 d_1 \times 10^E + d_2 \times 10^{E-1} + d_3 \times 10^{E-2} + ... + d_n \times 10^{E-n+1} d1×10E+d2×10E−1+d3×10E−2+...+dn×10E−n+1
二进制推广
将上述概念和思想推广到二进制,也就是基数(radix) R = 2 R=2 R=2 的情况。一个实数一样可以通过类似科学计数法的形式用二进制表示,如 1.01011 × 2 2 1.01011 \times 2^2 1.01011×22。其具体值也就可以展开后换算到十进制: 1.01011 × 2 2 = 1 × 2 2 + 0 × 2 1 + 1 × 2 0 + 0 × 2 − 1 + 1 × 2 − 2 + 1 × 2 − 3 = 5.375 1.01011 \times 2^2 = 1 \times 2^2 + 0 \times 2^1 + 1 \times 2^0 + 0 \times 2^{-1} + 1 \times 2^{-2} + 1 \times 2^{-3} = 5.375 1.01011×22=1×22+0×21+1×20+0×2−1+1×2−2+1×2−3=5.375
计算机中的小数
既然二进制实数也可以用 ± M × R E \plusmn M \times R^E ±M×RE 的形式来表示,计算机中就可以通过分别存储该形式中的各个部分来存储一个实数。由于确定使用二进制,也就是基数 R R R 固定为2,因此不必再额外耗费空间记录。二进制中也只有0或1,故尾数部分 M M M 也就可以固定表示为 M = 1. d 1 d 2 d 3 . . . M=1.d_1d_2d_3... M=1.d1d2d3...,即 M = 1 + F M=1+F M=1+F。因此二进制实数的表示形式可以简化为: ± 1. F × 2 E \plusmn 1.F \times 2^E ±1.F×2E。其中各个部分则按如下形式存储:
符号位 ± \plusmn ± | 指数 E E E | 小数 F F F |
---|---|---|
1字节 | double类型11位,float类型8位 | double类型52位,float类型23位 |
其中符号位只需要一个字节表示,0表示正、1表示负。指数部分由于有正负,故采用EXCESS表示系统,下面简单介绍一下该系统。
EXCESS表示系统
EXCESS表示系统主要目的是在不使用符号位的情况下也可以表示负数,具体思路就是以计数系统可表示的整体范围的中点作为0点,使用偏移量(Bias)来进行计数。偏移量的计算方法则为:当前值 - 中点值。如对于一个n位的二进制数,其能表示的范围为 0 → 2 n − 1 0 \to 2^{n}-1 0→2n−1,中点即为 2 n − 1 − 1 2^{n-1}-1 2n−1−1。中点值对应为0,小于中点的数值为负数,大于中点的值为正数。从而实现了不使用符号位也可以表示负数。
在float类型中指数部分有8位,可以表示的最大的数字为255( 2 8 − 1 2^8-1 28−1),中点为127( 2 7 − 1 2^7-1 27−1);对于double类型,指数部分有11位,可以表示的最大的数字为2047( 2 11 − 1 2^{11}-1 211−1),中点为1023( 2 10 − 1 2^{10}-1 210−1)。
下面以float类型为例总结十进制数值、二进制数值和对应的EXCESS系统数值(偏移量)之间的关系:
十进制 | 二进制 | EXCESS表示值 |
---|---|---|
255 | 1111 1111 | 128 (255 - 127) |
254 | 1111 1110 | 127 (254 - 127) |
… | … | … |
128 | 1000 0000 | 1 (128 - 127) |
127 (中点值) | 0111 1111 | 0 (127 - 127) |
126 | 0111 1110 | -1 (126 - 127) |
… | … | … |
1 | 0000 0001 | -126 (1 - 127) |
0 | 0000 0000 | -127 (0 - 127) |
特殊情况
上述仅为普遍的表现形式,但由于已经默认小数点前固定为1,即 M = 1 + F M = 1 + F M=1+F,则通过上述方法无法表示0,同时也无法处理正负无穷等特殊情况。故定义当指数部分 E E E 均为0或均为1时为特殊情况,即普通情况下指数部分仅可使用 ( m i n + 1 ) → ( m a x − 1 ) (min + 1) \to (max - 1) (min+1)→(max−1) 的范围。对于float类型来说即为 00000001 ( − 126 ) → 11111110 ( 127 ) 0000 0001 (-126) \to 1111 1110 (127) 00000001(−126)→11111110(127)。下面简单阐述一下两种特殊情况的处理方式。
第一种特殊情况(用于处理0及接近0的值):当指数部分 E E E 全为0时,对应的值改为 m i n + 1 min + 1 min+1,对于float即为-126(-127+1)。同时小数点前变为0,即尾数部分 M = 0. F M=0.F M=0.F。此时小数部分 F F F全为0时即可表示0。
第二种特殊情况(用于处理正负无穷):当指数部分 E E E 全为1时,表示无穷(NaN)。其中符号位为0时表示正无穷、符号位为1时表示负无穷。小数部分直接忽略。
举例(float)
接下来以float类型举几个例子,首先复习一下float类型各个部分的位数:
普通情况最大正实数
首先考虑普通情况下能表示的最大正实数,按上述的二进制表示形式,各个部分能取到的最大值分别为:
符号位 ± \plusmn ± | 指数 E E E | 小数 F F F |
---|---|---|
0 | 1111 1110 | 111…111 (23位) |
二进制下为 1.111...111 × 2 127 1.111...111 \times 2^{127} 1.111...111×2127,展开后可以计算出十进制下对应的值为 ( 1 + 2 − 1 + 2 − 2 + ⋯ + 2 − 22 + 2 − 23 ) × 2 127 = 2 128 − 2 104 ≈ 3.4028 × 1 0 38 (1 + 2^{-1} + 2^{-2} + \cdots + 2^{-22} + 2^{-23}) \times 2^{127} = 2^{128} - 2^{104} \approx 3.4028 \times 10^{38} (1+2−1+2−2+⋯+2−22+2−23)×2127=2128−2104≈3.4028×1038
普通情况最小负实数
对于普通情况下能表示的最小负实数,只需要将符号位变为负号,其他部分仍然取最大值即可:
符号位 ± \plusmn ± | 指数 E E E | 小数 F F F |
---|---|---|
1 | 1111 1110 | 111…111 (23位) |
二进制下为 − 1.111...111 × 2 127 -1.111...111 \times 2^{127} −1.111...111×2127,十进制下约等于 − 3.4028 × 1 0 38 -3.4028 \times 10^{38} −3.4028×1038
普通情况最小正实数
普通情况下可以表示的最小的正实数,除符号位外各个部分能取到的最小值分别为:
符号位 ± \plusmn ± | 指数 E E E | 小数 F F F |
---|---|---|
0 | 0000 0001 | 000…000 (23位) |
二进制下为 1.0 × 2 − 126 1.0 \times 2^{-126} 1.0×2−126,十进制下约等于 1.1755 × 1 0 − 38 1.1755 \times 10^{-38} 1.1755×10−38
特殊情况最大正实数
普通情况无法表示0或接近0的实数,因此指数部分全为0时为特殊情况,用于表示0或接近0的实数。该情况下小数部分全为0时即表示0,而小数部分全为1即为该情况下能取到的最大值:
符号位 ± \plusmn ± | 指数 E E E | 小数 F F F |
---|---|---|
0 | 0000 0000 (-126) | 111…111 (23位) |
二进制下为 0.111...111 × 2 − 126 0.111...111 \times 2^{-126} 0.111...111×2−126,展开后计算出十进制下对应的值为 ( 0 + 2 − 1 + 2 − 2 + ⋯ + 2 − 22 + 2 − 23 ) × 2 − 126 = 2 − 126 − 2 − 149 (0 + 2^{-1} + 2^{-2} + \cdots + 2^{-22} + 2^{-23}) \times 2^{-126} = 2^{-126} - 2^{-149} (0+2−1+2−2+⋯+2−22+2−23)×2−126=2−126−2−149。由此可见这种特殊情况下的最大值与普通情况下的最小值 2 − 126 2^{-126} 2−126 相差也就只有 2 − 149 2^{-149} 2−149,从而保证了不同情况下取值的相对连续。
[学习笔记] 二进制小数表示方法相关推荐
- 深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)
深度学习笔记(一):logistic分类 深度学习笔记(二):简单神经网络,后向传播算法及实现 深度学习笔记(三):激活函数和损失函数 深度学习笔记:优化方法总结 深度学习笔记(四):循环神经 ...
- 2020-4-5 深度学习笔记17 - 蒙特卡罗方法 3 ( 马尔可夫链蒙特卡罗方法MCMC-先验分布/后验分布/似然估计,马尔可夫性质)
第十七章 蒙特卡罗方法 中文 英文 2020-4-4 深度学习笔记17 - 蒙特卡罗方法 1 (采样和蒙特卡罗方法-必要性和合理性) 2020-4-4 深度学习笔记17 - 蒙特卡罗方法 2 ( 重要 ...
- Python学习笔记Task11.魔法方法
Python学习笔记Task11.魔法方法 魔法方法格式__init__ 1.基本 init(self[,-]) new(cls[,-]) del(self) str(self) repr(self) ...
- Laravel学习笔记汇总——Collection方法详解
## Laravel学习笔记汇总--Collection方法详解 本文参考:https:// laravel.com/docs/8.x/collections // 返回整个底层的数组 collect ...
- java学习笔记5--类的方法
接着前面的学习: java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址 ...
- Mr.J-- jQuery学习笔记(十)--trigger方法详解
看本篇文章之前建议先看这篇:Mr.J-- jQuery学习笔记(九)--事件绑定&移除&冒泡 也可以看我的专栏:Mr.J--jQuery学习 定义和用法 trigger() 方法触发被 ...
- 《南溪的目标检测学习笔记》——后处理方法的学习笔记
1 前言 后处理方法是很重要的,我在学习训练COCO数据集时深有体会,这里用笔记记录一下后处理的相关知识- 2 南溪使用的的后处理方法 南溪使用后处理操作流程: 阈值过滤(低阈值去框,提速nms)→\ ...
- 31天重构学习笔记3. 提升方法
摘要:由于最近在做重构的项目,所以对重构又重新进行了一遍学习和整理,对31天重构最早接触是在2009年10月份,由于当时没有订阅Sean Chambers的blog,所以是在国外的社区上闲逛的时候链接 ...
- jQuery学习笔记之extend方法小结
在学习jQuery的时候,学习到了$.extend的主要用法,在此做一个简单的总结. (1)当只写一个对象自变量时,拓展的是jQuery的工具方法,如: $.extend({aaa:function( ...
最新文章
- OpenGL编译错误的解决
- JS基础--函数与BOM、DOM操作、JS中的事件以及内置对象
- Java编程中的基本概念
- 这50个思维方法,深刻改变了我的人生
- python自动监测动态视频_Python自动化检测的动态属性
- 小米的语音识别系统是如何搭建的
- 常见的c语言头文件作用,C语言的头文件的作用是什么?
- mysql允许远程访问的用户
- 基于springboot乡村民宿系统
- Python标准库11 多进程探索 (multiprocessing包)
- 路径规划算法:动态规划
- 卡方检验python程序_卡方检验及其python实现
- python装饰器带参数函数二阶导数公式_机器学习【二】单变量线性回归
- 关于c中的%x及其它格式化符
- UEditor编辑器修改ueditor.all.js后压缩的问题
- 中小企业管理升级的焦点——企业资源管理系统(ERP)
- 《这一代人的学习》观看笔记
- SeaJS入门教程系列之使用SeaJS(二)
- 上层点云分割(C++PCL)
- ac100 linux,英特尔PROSet/无线驱动程序20.100.0 发布