文章目录

  • 科学计数法
  • 二进制推广
  • 计算机中的小数
  • 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​.d2​d3​...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.d1​d2​d3​...,即 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,从而保证了不同情况下取值的相对连续。

[学习笔记] 二进制小数表示方法相关推荐

  1. 深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)

    深度学习笔记(一):logistic分类  深度学习笔记(二):简单神经网络,后向传播算法及实现  深度学习笔记(三):激活函数和损失函数  深度学习笔记:优化方法总结  深度学习笔记(四):循环神经 ...

  2. 2020-4-5 深度学习笔记17 - 蒙特卡罗方法 3 ( 马尔可夫链蒙特卡罗方法MCMC-先验分布/后验分布/似然估计,马尔可夫性质)

    第十七章 蒙特卡罗方法 中文 英文 2020-4-4 深度学习笔记17 - 蒙特卡罗方法 1 (采样和蒙特卡罗方法-必要性和合理性) 2020-4-4 深度学习笔记17 - 蒙特卡罗方法 2 ( 重要 ...

  3. Python学习笔记Task11.魔法方法

    Python学习笔记Task11.魔法方法 魔法方法格式__init__ 1.基本 init(self[,-]) new(cls[,-]) del(self) str(self) repr(self) ...

  4. Laravel学习笔记汇总——Collection方法详解

    ## Laravel学习笔记汇总--Collection方法详解 本文参考:https:// laravel.com/docs/8.x/collections // 返回整个底层的数组 collect ...

  5. java学习笔记5--类的方法

    接着前面的学习: java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址 ...

  6. Mr.J-- jQuery学习笔记(十)--trigger方法详解

    看本篇文章之前建议先看这篇:Mr.J-- jQuery学习笔记(九)--事件绑定&移除&冒泡 也可以看我的专栏:Mr.J--jQuery学习 定义和用法 trigger() 方法触发被 ...

  7. 《南溪的目标检测学习笔记》——后处理方法的学习笔记

    1 前言 后处理方法是很重要的,我在学习训练COCO数据集时深有体会,这里用笔记记录一下后处理的相关知识- 2 南溪使用的的后处理方法 南溪使用后处理操作流程: 阈值过滤(低阈值去框,提速nms)→\ ...

  8. 31天重构学习笔记3. 提升方法

    摘要:由于最近在做重构的项目,所以对重构又重新进行了一遍学习和整理,对31天重构最早接触是在2009年10月份,由于当时没有订阅Sean Chambers的blog,所以是在国外的社区上闲逛的时候链接 ...

  9. jQuery学习笔记之extend方法小结

    在学习jQuery的时候,学习到了$.extend的主要用法,在此做一个简单的总结. (1)当只写一个对象自变量时,拓展的是jQuery的工具方法,如: $.extend({aaa:function( ...

最新文章

  1. OpenGL编译错误的解决
  2. JS基础--函数与BOM、DOM操作、JS中的事件以及内置对象
  3. Java编程中的基本概念
  4. 这50个思维方法,深刻改变了我的人生
  5. python自动监测动态视频_Python自动化检测的动态属性
  6. 小米的语音识别系统是如何搭建的
  7. 常见的c语言头文件作用,C语言的头文件的作用是什么?
  8. mysql允许远程访问的用户
  9. 基于springboot乡村民宿系统
  10. Python标准库11 多进程探索 (multiprocessing包)
  11. 路径规划算法:动态规划
  12. 卡方检验python程序_卡方检验及其python实现
  13. python装饰器带参数函数二阶导数公式_机器学习【二】单变量线性回归
  14. 关于c中的%x及其它格式化符
  15. UEditor编辑器修改ueditor.all.js后压缩的问题
  16. 中小企业管理升级的焦点——企业资源管理系统(ERP)
  17. 《这一代人的学习》观看笔记
  18. SeaJS入门教程系列之使用SeaJS(二)
  19. 上层点云分割(C++PCL)
  20. ac100 linux,英特尔PROSet/无线驱动程序20.100.0 发布

热门文章

  1. 100% width CSS 在 iPad / iPhone Safari 背景被截断 / 显示不全
  2. C#算法:推算经理的3个女儿的年龄
  3. django创建子应用
  4. RabbitMQ管理平台功能说明文档
  5. 常用工程塑料特性总结
  6. 【前端面试题】—21道有关移动端的面试题
  7. 阿里3年被裁,赔偿n+3,到手30多万!感谢阿里让我人生开挂!
  8. 字符串分割split()方法:将一个字符串通过指定的分隔符分割成若干子串
  9. 使用MOB免费短信验证码进行登录(注册)
  10. Android 免费短信验证码--Mob.com