【计算机组成原理】浮点数的表示及IEEE 754规格化

news2024/11/24 18:42:15

📢博客主页:https://blog.csdn.net/2301_779549673
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 JohnKi 原创,首发于 CSDN🙉
📢未来很长,值得我们全力奔赴更美好的生活✨

在这里插入图片描述

在这里插入图片描述

文章目录

  • 📢前言
  • 🏳️‍🌈1. 浮点数的规格化表示
    • ❤️ 1.1 为什么要规格化
    • 🧡 1.2 规格化的特点
    • 💛 1.3 浮点数的表示范围
  • 🏳️‍🌈2. IEEE 754
    • ❤️ 2.1 偏置值和移码的概念
    • 🧡 2.2 IEEE 754标准
    • 💛 2.3 IEEE 754浮点数的范围
  • 👥总结


📢前言

浮点数在计算机中起着至关重要的作用。在位数固定的情况下,定点数能表示的数字范围有限,而浮点数则可以在相同的位数下扩大数的表示范围,同时尽可能地保持有效精度。

而计算机中的浮点数不论是从储存还是运算都与我们生活中的计算方式大相径庭,所以初学者在刚刚学习时总是很难理清规格化IEEE运算原理,这里笔者就从自己的理解出发,根据哔站王道考研课程及其教材进行一下难点总结

总思路图如下

在这里插入图片描述


🏳️‍🌈1. 浮点数的规格化表示

规格化浮点数的目的主要是为了在计算机中更有效地表示和处理数值,提高数值的精度和运算的准确性。同时,规格化的表示方法可以使计算机在进行浮点数运算时遵循统一的规则,便于硬件设计和实现。

在这里插入图片描述

❤️ 1.1 为什么要规格化

先看个例子
先来看个例子,

  • 逗号前为符号位,分号分隔阶码和尾数

所以a的阶码为 +1(十进制,即2的+1次方) , 尾数为 -0.1001(二进制)
真值就为 -0.1001 * 2^1-1.001(二进制)
8位时表示为 0 01 1 1001

b也是相同道理,阶码为 +2(十进制,即2的+1次方) , 尾数为 0.01001(二进制)
真值就为 0.01001 * 2^11.001(二进制)
8位时表示为 0 10 0 0100,最后一个1因为超出被舍弃了

很显然这种情况很容易在存储空间不够时造成了精度的丢失,为了有效地提高精度,就需要对浮点数进行规格化,也就是使有效数字尽量沾满尾数数位

规格化的基本操作就是使非零浮点数在尾数的最高数位上保证是一个有效值

所以需要对b进行规格化处理,即对尾数部分左移一位,与此同时阶码部分因为尾数左移了一位就要减1,所以最后规格化下,b的8位表示为 0 10 0 1001,这个做法也成为左规 - 左移n位

相应的,存在右规,就是因为尾数影响到了符号位,需要对尾数部分右移。提一嘴,往往通过双符号位的方法判断是否影响

左规:当浮点数运算的结果为非规格化时要进行规格化处理,将尾数算数左移一位,阶码减1
右规:当浮点数运算的结果尾数出现溢出(双符号位为01或10)时,将尾数算数右移一位,阶码加1

举个例子:
在这里插入图片描述
这里就用到了双符号位通过判断符号位的与关系,判断运算是否导致了溢出(这里因为原本是负数,相加后溢出,所以是负溢出,更高的符号位为正确的符号),然后利用右规使其规格化

🧡 1.2 规格化的特点

在这里插入图片描述

这里别的没啥好说的主要的负数的补码部分

因为是复数的补码,所以假设一个负数原来是1.10001,那么它的补码的就是1.01111。所以它往往是以1.0xxx的形式出现的

为了记快一点,可以理解为补码的符号位位数最高位必须不同,即为0.11.0开头

还有负数补码的最小值,我是这么理解的

  1. 二进制负数的最小值为全1
  2. 原码转补码是,去符号位,取反,加1
  3. 所以补码去开头1.0后面全0,即1.00...0
  4. 此时对应的就是-1,按理说这是浮点数到不了的值,但是因为是补码存在取反加一的可能就出现了这个值。

tip1:在规格化时,题目会说此时是补码还是原码,不需要进行转换,直接右规、左规实现规格化就行了
tip2:补码规格化时,右移高位补1,左移低位补0,

举个例子:
在这里插入图片描述

  1. 负数补码规格化,1.0开头,直接左规或右规
  2. 负数补码低位补0,高位补1,所以右移是不行的
  3. 负数补码小数点后面紧跟的1可以都看成原码的0,不影响最终值
  4. 左移3位,达到1.0100000
  5. 尾数左移3位,阶数减3,阶数为0.011
  6. 结果为0.011;1.0100000

💛 1.3 浮点数的表示范围

运算结果大于最大正数时称为正上溢,小于绝对值最大负数时称为负上溢,正上溢和负上溢统称上溢
数据一旦产生上溢,计算机必须中断运算操作,进行溢出处理。

当运算结果在0至最小正数之间时称为正下溢,在0至绝对值最小负数之间时称为负下溢,正下溢和负下溢统称下溢
数据下溢时,浮点数值趋于零,计算机将其当作机器零处理。

请添加图片描述
这种产生上下溢的行为,往往是在运算中导致的

🏳️‍🌈2. IEEE 754

❤️ 2.1 偏置值和移码的概念

在无特定说明的情况下不论是一般的前面讲的规格化的浮点数还是IEEE 754的他们的阶码都是移码,有特别说明的话就是题干中所说,比如1.2中就是补码

偏置值:一般情况下为 64(32位)、128(64位),IEEE 754中为 64-1(32位)、128-1(64位)
移码:真值 + 偏置值

在这里插入图片描述

举个例子:IEEE 754标准,32位
令偏置值 = 127D = 0111 1111B,即2^n-1-1
真值 -128 = -1000 0000B
移码 = 偏置值 + 真值 = -1000 0000 + 01111111 = 1111 1111

🧡 2.2 IEEE 754标准

在这里插入图片描述
IEEE 754标准 比一般的 规格化浮点数 更标准,规格化浮点数往往会因为题干的不同而发生明显变化,这体现在表示格式、偏置值、阶码尾数的表现形式等方面,比如说

  • 1位阶码符号 + 3位阶码 + 1位尾数符号 + 7位尾数
  • 1位符号 + 7位阶码 + 24位尾数

可IEEE 754标准的浮点数,就是符号s +阶码e + 尾数f,毫无例外,并且

  • 阶码一定是补码
  • 尾数一定是原码
  • 偏置值是2的n-1次

一般的偏置值是2的n次,n为阶码的尾数

另外,关于IEEE 754的尾数部分,我们常认为是二进制原码,并且隐藏表示最高位的1,所以尾数部分的实际值为1.M表示时为M

举个例子,将十进制数 -8.25 转换为 IEEE 754 单精度浮点数(32位)格式便是

  1. -8.25 转换为二进制数为 -1000.01 = -1.00001 x 2^3
  2. 得出阶码 E = 3(真值) +127(偏置值) = 130(移码)
  3. 所以最后的即 1(1位符号位) + 1000 0010(8位阶码) + 0000 1000 0000 0000 0000 000(23位尾数)

💛 2.3 IEEE 754浮点数的范围

在这里插入图片描述
我们先不考虑阶码的全1或全0,那么阶码的取值范围就是[-126,127]
在这里插入图片描述
在这种情况下,尾数取任意值都无所谓,

可以全0,表示1.00……0,即1
也可以是全1,表示1.11……1,即1+1/2+1/4+……+1/223 即 2-1/223(32位下)

由此,我们就能得出IEEE 754浮点数的范围

至于阶码全0和全1的情况

在这里插入图片描述

  1. 全0阶码全0尾数: +0/-0。零的符号取决于符号s,一般情况下+0和-0是等效的。
  2. 全1阶码全0尾数: +∞/-∞。fx在数值上大于所有有限数,-则小于所有有限数。引入无穷大数的目的是,在计算过程出现异常的情况下使得程序能继续进行下去。
  3. 全1阶码非0尾数: NaN(NotaNumber)。表示一个没有定义的数,称为非数。
  4. 全0阶码非0尾数: 非规格化数。非规格化数的特点是阶码为全0,尾数高位有一个或几个连续的0,但不全为0。因此,非规格化数的隐藏位为0,且单精度和双精度浮点数的指数分别为-126或-1022。非规格化数可以用于处理阶码下溢。

👥总结

本篇博文对 浮点数的表示及IEEE 754规格化 做了一个较为详细的介绍,不知道对你有没有帮助呢

觉得博主写得还不错的三连支持下吧!会继续努力的~

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2129360.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件工程测试

1. 软件测试概述 通俗地说,软件测试是为了发现错误而执行程序的过程。 软件测试:根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序…

深度学习:基础知识

深度学习是机器学习的一个领域 神经网络构造 一个神经元有n个输入,每一个输入对应一个权值w,神经元内会对输入与权重做乘法后求和。 感知器 由两层神经元组成的神经网络--“感知器”(Perceptron),感知器只能线性划分数据。 公式…

Netty笔记03-组件Channel

文章目录 Channel概述Channel 的概念Channel 的主要功能Channel 的生命周期Channel 的状态Channel 的类型channel 的主要方法 ChannelFutureCloseFuture💡 netty异步提升的是什么要点总结 Channel概述 Channel 的概念 在 Netty 中,Channel 是一个非常重…

c++题目_洛谷 / 题目详情 P1012 [NOIP1998 提高组] 拼数

# [NOIP1998 提高组] 拼数 ## 题目描述 设有 $n$ 个正整数 $a_1 \dots a_n$,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。 ## 输入格式 第一行有一个整数,表示数字个数 $n$。 第二行有 $n$ 个整数,表…

Linux学习笔记(黑马程序员,前四章节)

第一章 快照 虚拟机快照: 通俗来说,在学习阶段我们无法避免的可能损坏Linux操作系统,如果损坏的话,重新安装一个Linux操作系统就会十分麻烦。VMware虚拟机支持为虚拟机制作快照。通过快照将当前虚拟机的状态保存下来,…

Leetcode 移动零

要求将数组中的所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。下面是该题的 C 解决方案&#xff1a; class Solution { public:void moveZeroes(vector<int>& nums) {int nonZeroPos 0; // 记录非零元素应该放置的位置// 遍历数组&#xff0c;…

镭速如何高效使用SQLite数据库高速传输结构化数据文件传输

SQLite数据库因其小巧、跨平台和无需配置的特性&#xff0c;在众多关系型数据库中独树一帜。与传统的服务器/客户端架构数据库&#xff0c;例如MySQL不同&#xff0c;SQLite通常被嵌入到应用程序中作为一个库。它不仅支持创建索引&#xff0c;还严格遵循ACID原则&#xff0c;非…

先攒一波硬件,过几年再给电脑升级,靠谱吗?想啥呢?

前言 最近有小伙伴发来消息&#xff1a;我可以今年先买电脑的部分硬件&#xff0c;明年再买电脑的另一部分硬件&#xff0c;再组装起来不就是一台电脑了吗&#xff1f; 这确实是一个很好的办法。 我还记得大学有个室友&#xff0c;从大一每个月省吃俭用&#xff0c;攒下的钱…

全球AI应用市场洞察:市场快速崛起,“陪伴式AI”、“图像AI”应用爆款频出!

自2023年 GPT4 的问世以来&#xff0c;得益于这股新的技术变量&#xff0c;各类 AI 应用在市场上遍地开花。在这轮热潮之下&#xff0c;不同市场和细分赛道有何机遇和挑战&#xff1f;以下根据 Sensor Tower 最新报告分析&#xff0c;帮助移动开发者、广告主洞察全球AI应用市场…

Linux系统:chgrp命令

1、命令详解&#xff1a; chgrp命令是Linux操作系统中用于修改文件或目录的所属组的命令。chgrp命令还可以修改链接文件的所属组&#xff0c;而不是链接所指向的文件的所属组。默认情况下&#xff0c;只有文件的所有者和超级用户才能修改文件的所属组&#xff0c;但如果用户是一…

JavaWeb【day08】--(MySQL-Mybatis入门)

数据库开发-MySQL 1. 多表查询 1.1 概述 1.1.1 数据准备 SQL脚本&#xff1a; #建议&#xff1a;创建新的数据库 create database db04; use db04; ​ -- 部门表 create table tb_dept (id int unsigned primary key auto_increment comment 主键ID,name v…

Win32编程:创建属于你的第一个窗口

目录 一、Win32程序的运行过程 二、创建Windows窗口 1、分析 2、完整代码 一、Win32程序的运行过程 Win32编程&#xff0c;也称为Windows编程。运行步骤主要包含&#xff1a;加载程序&#xff08;操作系统加载程序的可执行文件&#xff08;exe格式&#xff09;到内存中,创建…

代码随想录刷题day30丨452. 用最少数量的箭引爆气球, 435. 无重叠区间,763.划分字母区间

代码随想录刷题day30丨452. 用最少数量的箭引爆气球&#xff0c; 435. 无重叠区间&#xff0c;763.划分字母区间 1.题目 1.1用最少数量的箭引爆气球 题目链接&#xff1a;452. 用最少数量的箭引爆气球 - 力扣&#xff08;LeetCode&#xff09; 视频讲解&#xff1a;贪心算法…

ColorThief的介绍与使用

概述 colorThief是一个 Javascript 插件&#xff0c;支持在浏览器端或 Node 环境中使用。Thief的中文意思是偷窃、小偷。colorThief的作用就是通过算法去获取图片的色源。 API 介绍与示例 colorThief提供两个方法&#xff0c;getColor和getPalette&#xff0c;这两个方法在 …

类和对象(c++)

欢迎来到本期频道&#xff01; 类和对象 类定义&#xff1a;格式&#xff1a;类域&#xff1a;访问限定符友元内部类this指针静态与非静态成员关系类型转换六大默认成员函数&#xff08;C98&#xff09;1️⃣构造函数2️⃣拷贝构造函数浅拷贝与深拷贝 3️⃣赋值重载拷贝函数4️…

x-cmd pkg | superfile: 终端文件管理器,界面精致美观

目录 简介快速上手功能特点竞品和相关项目进一步阅读 简介 superfile 是 github.com/yorukot 用 Go 开发的终端文件管理器&#xff0c;相比于其他终端文件管理器&#xff0c;它最显著的特点是 UI 精致美观。 Tip Superfile 采用了特殊的 Unicode 符号来标识各种类型的文件&…

【我的 PWN 学习手札】Unsortedbin Leak

前言 从前都是野路子学习&#xff0c;学校时间也比较紧张&#xff0c;没有能够好好总结。一直有做个人笔记的习惯&#xff0c;但是学习路线比较分散盲目&#xff0c;虽然跟着wiki做&#xff0c;但是也面临知识点不全的窘境。近期开始跟着课程系统的学习&#xff0c;对于老的知…

mp3转文字要怎么处理?使用这4个工具就对了

MP3是音频当中比较常用的格式&#xff0c;如果像将其转换成文字内容&#xff0c;一般的语音转文字工具都是可以完成的。但是音频转换成文字的过程中&#xff0c;它的准确率是会受到像口音&#xff0c;语言&#xff0c;环境音等因素的影响的。所以大家如果想将自己的mp3语音转成…

en造数据结构与算法C# 用数组实现个栈还不简单???看我一秒破之!!!(unity演示)

实现效果 线性表&#xff0c;线性表是指数据元素按顺序排列的一种数据结构&#xff0c;下面这些东西可以说都是线性表&#xff0c;所以用array实现三者一点问题都没有 分别是List动态数组&#xff0c;stack栈和queue队列&#xff0c;今天就秒掉stack 栈&#xff1a;先进后出 实…

Vue邮件发送:如何有效集成邮件发送功能?

vue邮件发送功能实现方法&#xff1f;Vue邮件发送性能怎么优化&#xff1f; 无论是用户注册验证、密码重置&#xff0c;还是通知提醒&#xff0c;邮件发送功能都能提供重要的支持。本文将详细探讨如何在Vue项目中有效集成邮件发送功能&#xff0c;确保邮件能够准确、及时地送达…