5.浮点数及其运算

目录

一. 浮点数的表示

(1)表示

(2)规格化

二. IEEE 754标准

三. 浮点数的运算

(1)步骤

(2)关于舍入

四. C语言的强制类型转换


一. 浮点数的表示

(1)表示

定点数可表示的数字范围有限,但我们不能无限制地增加数据的长度。

浮点数:由阶码和尾数构成:

阶码E反映浮点数的表示范围及小数点的实际位置;尾数M的数值部分的位数n反映浮点数的精度。

阶码:常用补码或移码表示的定点整数。尾数:常用原码或补码表示的定点小数。
例:阶码、尾数均用补码表示,求a、b的真值。a=0,01;1.1001  b=0,10;0.01001
解:a:阶码0,01对应真值+1,尾数1.1001对应真值-0.0111=-(2^{-2}+2^{-3}+2^{-4})

所以a的真值2^{-1}*-0.0111=-0.111,其中2^{-1}相当于尾数表示的定点小数算数左移一位,或小数点右移一位。

同理b的真值是2^{2}*+0.01001=+1.001.

(2)规格化

规格化浮点数:规定尾数的最高数值位必须是一个有效值。不能是0.

  • 左规:当浮点数运算的结果为非规格化时要进行规格化处理,将尾数算数左移一位,阶码减1。(通过算数左移,阶码减1来规格化)

  • 右规:当浮点数运算的结果尾数出现溢出(双符号位为01或10)时,将尾数算数右移一位,阶码加1。(通过算数右移阶码加1来规格化)

规格化浮点数的特点:

1.用原码表示的尾数进行规格化:规格化的原码尾数,最高数值位一定是1
正数为0.1××...×的形式,其最大值表示为0.11...1;最小值表示为0.10...0。尾数的表示范围为1/2\leq M\leq(1-2^{-n})
负数为1.1××...×的形式,其最大值表示为1.10...0;最小值表示为1.11..1。尾数的表示范围为-(1-2^{-n})\leqslant M\leqslant-1/2
2.用补码表示的尾数进行规格化:规格化的补码尾数,符号位与最高数值位一定相反(人为规定)
正数为0.1××...×的形式,其最大值表示为0.11...1;最小值表示为0.10...0。尾数的表示范围为1/2\leq M\leq(1-2^{-n})
负数为1.0××...×的形式,其最大值表示为1.01...1;最小值表示为1.00...0。尾数的表示范围为-1\leqslant M\leqslant-(1/2+2^{-n})

二. IEEE 754标准

我们首先回顾下移码的定义:移码=真值+偏置值
此处8位移码的偏置值=128D=1000 0000B,即2^{n-1}.
例如真值-127=-1111111B,移码=-1111111+ 10000000= 0000 0001
例如真值-3=-11B,移码=-11+ 10000000= 0111 1101。

现在我们把偏置值减去1,也就是127D=0111 1111B,即2^{n-1}-1.

在IEEE 754标准中,阶码用移码表示,尾数用原码表示。

规格化的短浮点数的真值为:(-1)^s\times 1.M\times2^{E-127}。隐藏表示天然的就保证了规格化。阶码真值=移码-偏移量。

例1:将十进制数-0.75转换为IEEE 754的单精度浮点数格式表示。

解:(-0.75)_{10}=(-0.11)_{2}=(-1.1)_2\times 2^{-1},进行了右规。
数符=1,尾数部分= .1000000.....(隐含最高位1)

阶码真值=-1,单精度浮点型偏移量=127D,移码=阶码真值+偏移量=-1+1111111=0111 1110(凑足8位,当然也可以先10进制计算-1+127=126,126转换成二进制就是0111 1110)
所以转换结果是1 01111110 10000000000000000000000

例2:IEEE 754的单精度浮点数C0 A0 00 00H的值时多少。

解:C0 A0 00 00H→1100 0000 1010 0000 0000 0000 0000 0000

数符=1→是个负数
尾数部分=.0100....(隐含最高位1)→尾数真值=(1.01)_2

移码=10000001,若看作无符号数=129D,单精度浮点型偏移量=127D
阶码真值=移码-偏移量=1000 0001-111 1111= (0000 0010)_2=(2)_{10}

浮点数真值=(-1.01)_2\times 2^2=-5.0.

IEEE 754单精度浮点型能表示的最小绝对值、最大绝对值是:
最小绝对值:尾数全为0,阶码真值最小-126,对应移码机器数0000 0001此时整体的真值为(1.0)_2\times 2^{-126}
最大绝对值:尾数全为1,阶码真值最大127,对应移码机器数11111110此时整体的真值为(1.11...11)_2\times 2^{127}

最后介绍几种特殊情况,也就是阶码全1或者全0的情况:

  • 当阶码E全为0,尾数M不全为0时,表示非规格化小数±(0.xx….x)×2^{-126},此时尾数隐藏的最高位是0,阶码真值固定为-126;
  • 当阶码E全为0,尾数M全为0时,表示真值±0;
  • 当阶码E全为1,尾数M全为0时,表示无穷大;
  • 当阶码E全为1,尾数M不全为0时,表示非数值“NaN"(Not a Number);

三. 浮点数的运算

(1)步骤

下面举一个浮点数计算的例子:

例:已知十进制数X=-5/256、Y=+59/1024,按机器补码浮点运算规则计算X-Y,结果用二进制表示,浮点数格式如下∶阶符取2位,阶码取3位,数符取2位,尾数取9位。

注意这里全部采用补码运算:

(2)关于舍入

“0”舍“1”入法:类似于十进制数运算中的“四舍五入”法,即在尾数右移时,被移去的最高数值位为0,则舍去;被移去的最高数值位为1,则在尾数的末位加1。这样做可能会使尾数又溢出,此时需再做一次右规。

恒置“1”法:尾数右移时,不论丢掉的最高数值位是“1”还是“0”,都使右移后的尾数末位恒置“1”。这种方法同样有使尾数变大和变小的两种可能。

四. C语言的强制类型转换

char→int →long→double,或float→double,范围、精度从小到大,转换过程没有损失。
而int→float可能损失精度,float→int可能溢出及损失精度。
int:表示整数,范围-2^{31}2^{31}-1,有效数字32位;
float:表示整数及小数,范围\pm [2^{-126},2^{127}\times(2-2^{-23})],有效数字23+1=24位。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

原型模式(创建型)

一、前言 原型模式是一种创建型设计模式,它允许在运行时通过克隆现有对象来创建新对象,而不是通过常规的构造函数创建。在原型模式中,一个原型对象可以克隆自身来创建新的对象,这个过程可以通过深度克隆或浅克隆来实现。简单说原型…

MySQL中UUID主键的优化

UUID(Universally Unique IDentifier 通用唯一标识符),是一种常用的唯一标识符,在MySQL中,可以利用函数uuid()来生产UUID。因为UUID可以唯一标识记录,因此有些场景可能会用来作为表的主键,但直接…

AIX5.3安装weblogic10.3

目录 1安装IBM JDK 1.6 2图形化准备 3安装weblogic 准备 4图形化界面安装 1安装IBM JDK 1.6 1.1检查操作系统 # oslevel 5.3.0.0 # bootinfo -y (显示AIX机器硬件是64位) 64 # bootinfo -K (显示AIX系统内核是64位) 64 因此,系统需要安装64位的jdk,…

使用非递归的方式实现归并排序

使用非递归的方式实现归并排序 话不多说,直接上代码: public class MergySort {public static void main(String[] args) {int[] nums {38, 27, 43, 3, 9, 82, 10};int[] sortedArray MergySort.mergySort(nums);// 输出排序后的数组for (int num : …

AIGC:使用bert_vits2实现栩栩如生的个性化语音克隆

1 VITS2模型 1.1 摘要 单阶段文本到语音模型最近被积极研究,其结果优于两阶段管道系统。以往的单阶段模型虽然取得了较大的进展,但在间歇性非自然性、计算效率、对音素转换依赖性强等方面仍有改进的空间。本文提出VITS2,一种单阶段的文本到…

如何构建并提高自己的核心竞争力?

上一篇文章聊到了软件工程师的核心竞争力主要分为三个方面:快速学习能力、解决问题能力和个人影响力,且核心竞争力的培养和提高需要长时间实践和积累,并不是短时间就可以达到的。这篇文章, 来聊聊如何培养和提高自己的核心竞争力。…

里氏代换原则

package com.jmj.principles.dmeo2.after;/*** 四边形接口*/ public interface Quadrilateral {double getLength();double getWidth();}package com.jmj.principles.dmeo2.after;/*** 长方形类*/ public class Rectangle implements Quadrilateral{private double length;priv…

windowCPU虚拟化已禁用解决方案

windowCPU虚拟化已禁用解决方案 1. 前言 window电脑要安装Docker或者VMware虚拟机就需要开启windows自身的虚拟化功能,除了在设置上要开启Hyper-V只要还需要开启CPU的虚拟化功能,而CPU的虚拟化则需要通过进入BIOS设置中开启 2. 检查是否开启了虚拟化功…

探索Linux世界:从基础到高级

标题 探索Linux世界:从基础到高级 🚀第一章:Linux入门篇第二章:掌握Linux基础命令第三章:文件操作的艺术第四章:征服vi/vim编辑器第五章:掌握Linux全部命令 文末赠书 博主 默语带您 Go to New W…

C# .NET Core API Controller以及辅助专案

准备工作 Windows 10Visual Studio 2019(2017就有可以集中发布到publish目录的功能了吧)C#将方法封装(据说可以提高效率,就像是我们用的dll那种感觉新增专案作为我们API的辅助专案(作用类似dll,此处,你也可以在你自己的API专案里建文件夹,但…

MCSM面板搭建教程和我的世界Paper服务器开服教程

雨云游戏云VPS服务器用Linux搭建MCSM面板和Minecraft Paper1.20.2服务器教程。 本教程演示安装的MC服是Paper 1.20.2版,其他版本也可以参考本教程,差别不大。 本教程使用Docker来运行mc服,可以方便切换不同Java版本,方便安装多个…

Ubuntu安装步骤

点击文件 --> 新建虚拟机: 找到第一章下载的ubuntu镜像文件,然后下一步 自定义名称和位置,然后下一步 根据需要定内存,2G以上即可: 单个文件即可 点击完成 回车,然后等待安装 回车 回车 回车 按上下键找…

QWidget 实现九宫格图案解锁

前言 最近需要实现一个九宫格图案解锁功能,查看网上的方案,基于QWidget的方案全网搜来搜去就一篇 Qt编写自定义控件:图案密码锁, 都是炒来炒去的同一篇,代码还比较复杂,运行后在PC端还是可以的,但是运行在arm机器上,就卡顿,或者容易断开手势连接线,各种不友好,于是自…

【python高级】asyncio 并发编程

【大家好,我是爱干饭的猿,本文重点介绍python高级篇的事件循环,task取消和协程嵌套、call_soon、call_later、call_at、 call_soon_threadsafe、asyncio模拟http请求、asyncio同步和通信、aiohttp实现高并发实践。 后续会继续分享其他重要知…

leetcode刷题 - SQL - 中等

1. 176. 第二高的薪水 筛选出第二大 查询并返回 Employee 表中第二高的薪水 。如果不存在第二高的薪水,查询应该返回 null(Pandas 则返回 None) 。查询结果如下例所示。 666中等的第一题就上强度 强行解法 select max(salary) as SecondHighestSalary from Emp…

多维详述MediaBox互动直播AUI Kit低代码开发方案

本专栏将分享阿里云视频云MediaBox系列技术文章,深度剖析音视频开发利器的技术架构、技术性能、开发能效和最佳实践,一起开启音视频的开发之旅。本文为MediaBox最佳实践篇,重点从互动直播AUI Kit的核心能力、技术架构、快速集成等方面&#x…

Seata之AT模式

目录 AT模式的引进 AT模式前提 AT模式的工作流程 案例流程梳理 AT模式的原理 具体使用 优缺点 小结 AT模式的引进 我们XA模式有死锁(协议阻塞)问题:XA prepare 后,分支事务进入阻塞阶段,收到 XA commit 或 XA…

【手写模拟Spring底层原理】

文章目录 模拟Spring底层详解1、结合配置类,扫描类资源1.1、创建需要扫描的配置类AppConfig,如下:1.2、创建Spring容器对象LyfApplicationContext,如下1.3、Spring容器对象LyfApplicationContext扫描资源 2、结合上一步的扫描&…

vue3 文字轮播打字机效果

实现效果 1.安装依赖 npm install duskmoon/vue3-typed-js 2.html <div class"title_left_1"><Typed :options"options" class"typedClass"><div class"typing"></div></Typed> </div> 3.ts…

Vue 组件化编程 和 生命周期

目录 一、组件化编程 1.基本介绍 : 2.原理示意图 : 3.全局组件示例 : 4.局部组件示例 : 5.全局组件和局部组件的区别 : 二、生命周期 1.基本介绍 : 2.生命周期示意图 : 3.实例测试 : 一、组件化编程 1.基本介绍 : (1) 开发大型应用的时候&#xff0c;页面往往划分成…