csapp2.4节——浮点数

news2025/1/28 1:06:51

目录

二进制小数

十进制小数转二进制小数

IEEE浮点表示

规格化表示

非规格化表示

特殊值

舍入

浮点运算


二进制小数

类比十进制中的小数,可定义出二进制小数

例如1010.0101

小数点后的权重从-1开始递减。

十进制小数转二进制小数

整数部分使用辗转相除,小数部分按照如下方法

乘2取整,顺序排列。

例如把0.8125转化为二进制小数

0.8125\times 2=1.625......取整得1,小数部分乘2

0.625\times 2=1.25......取整得1

0.25\times 2=0.5......取整得0

0.5\times 2=1.0......取整得1

故二进制小数表示为0.1101

IEEE浮点表示

该标准类似十进制的科学计数法来表示一个小数

V = (-1)^s\times M\times 2^E

s是符号位,对于数值0的符号位解释为特殊情况

M是尾数,1\leqslant M< 20\leqslant M< 1

阶码,E的作用是加权

将浮点数的位表示划分为这三部分,

一个单独的符号位s直接编码s,

k位阶码字段exp表示E

n位编码尾数frac是M

C语言中float阶码为8位,尾数23位;double阶码为11位,尾数52位。

编码分为三种

规格化表示

当阶码的位非全0也非全1时

对于k位阶码表示,E = e-Bias,e是k位无符号数,Bias是偏移量,大小为2^{k-1}-1

对于n位小数字段,在规格化表示下,只存储了小数点右边的值,在计算最终值时再加上1,因为左边的值恒为1,这样可多一位精度。

非规格化表示

当阶码的位为全0时

对于k位阶码表示,E = e-Bias,在这e = 1,Bias是偏移量,大小为2^{k-1}-1

对于n位小数字段,只存储小数点右边的值,这时不会计算最终值时加1。

关于为什么e取1不取符合直觉的0,是为了在规格化表示的最小数和非规格化表示的最大数之间的平滑过渡。

下文将举例解释。

特殊值

阶码全1时,若n位小数字全0则表示正负无穷,否则表示NaN(Not a Number)。

下面举个例子来理解编码,例如十进制小数3.75,转化为二进制小数为11.11,我们要将它表示为一个float类型的数,也就是说有8位阶码,Bias=127,23位小数字段。

将其转为类似科学计数法的形式1.111\times 2^1

符号位s为0,E=e-Bias=1e=128,算出e的8位二进制表示为1000 0000,23位只存储小数点后的23位,为1100 0000 0000 0000 0000 000

现在举例说明非规格化表示e取1的问题,例如float能表示的最大非规格数是阶码全0,小数位全1,表示的二进制小数是0.1111 1111 1111 1111 1111 111 \times 2^{-126}

而最小的规格化表示是阶码最低位为1,阶码其余位为0,小数位为全0,则表示的二进制小数是

1.0\times 2^{-126}

可以看出这种变化是平滑的,主要原因:对于非规格化表示与规格化表示的阶码取1的情况,它们权重是相等的

舍入

IEEE浮点格式定义了四种舍入法,默认是向偶数舍入,向偶数舍入在非中间值时就是正常的四舍五入,对于有中间值的情况有特殊处理。

这是对十进制小数舍入到整数的例子,对于1.40和1.60比较好理解,对于1.5,采用向偶数舍入,也就是向要保留的最低有效位变成偶数的方向舍入。所以1.5舍入为2,2.5舍入为2,-1.5舍入为-2.

对于二进制的情况来说,难点在于判断是否是中间值。

如0.101011,要保留到小数点后四位,可一眼看出后面的数非中间值。

但对于0.101010,它若要舍入到小数点后四位,有两个方向,0.1010和0.1011,算出0.101010与这两个数的差的绝对值是相同的,说明四位后是中间值,这时采用向偶数舍入的策略,选择0.1010。

浮点运算

对于浮点数相加,例如1.10\times 2^21.11\times 2^{-1}相加,会先对齐小数点,将较低的位权的那个数位权提升,于本例就是把1.11\times 2^{-1}变成0.00111\times 2^2然后再把小数部分相加。

若相加后小数位数超出了能表示的范围会进行舍入。

可以看到相加中存在移位操作,这种移位操作就很可能造成精度丢失,对于一个大数与小数相加,更有可能造成无法容忍的误差或错误,(3.14+1e10)-1e10=03.14+(1e10-1e10)=3.14,对于第一个算式,3.14在相加时由于舍入会被丢失。

这个例子也能说明浮点加法不满足结合律,改变运算顺序就会改变运算结果。

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

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

相关文章

神经网络|(一)加权平均法,感知机和神经元

【1】引言 从这篇文章开始&#xff0c;将记述对神经网络知识的探索。相关文章都是学习过程中的感悟和理解&#xff0c;如有雷同或者南辕北辙的表述&#xff0c;请大家多多包涵。 【2】加权平均法 在数学课本和数理统计课本中&#xff0c;我们总会遇到求一组数据平均值的做法…

Spring 框架:配置缓存管理器、注解参数与过期时间

在 Spring 框架中&#xff0c;可通过多种方式配置缓存具体行为&#xff0c;常见配置方法如下。 1. 缓存管理器&#xff08;CacheManager&#xff09;配置 基于内存的缓存管理器配置&#xff08;以SimpleCacheManager为例&#xff09; SimpleCacheManager 是 Spring 提供的简单…

FPGA实现任意角度视频旋转(完结)视频任意角度旋转实现

本文主要介绍如何基于FPGA实现视频的任意角度旋转&#xff0c;关于视频180度实时旋转、90/270度视频无裁剪旋转&#xff0c;请见本专栏前面的文章&#xff0c;旋转效果示意图如下&#xff1a; 为了实时对比旋转效果&#xff0c;采用分屏显示进行处理&#xff0c;左边代表旋转…

openlayer getLayerById 根据id获取layer图层

背景&#xff1a; 在项目中使用getLayerById获取图层&#xff0c;这个getLayerById()方法不是openlayer官方文档自带的&#xff0c;而是自己封装的一个方法&#xff0c;这个封装的方法的思路是&#xff1a;遍历所有的layer&#xff0c;根据唯一标识【可能是id&#xff0c;也可能…

设计模式-建造者模式、原型模式

目录 建造者模式 定义 类图 优缺点 角色 建造者模式和工厂模式比较 使用案例 原型模式 定义 类图 优缺点 应用场景 应用类型 浅克隆 深克隆 建造者模式 定义 将一个复杂的对象的构造与它的表示分离&#xff0c;使同样的构建过程可以创建不同的表示&#xff0c;…

PTMD2.0-疾病相关的翻译后修饰数据库

翻译后修饰&#xff08;PTMs&#xff0c;post-translational modifications&#xff09;通过调节蛋白质功能参与了几乎所有的生物学过程&#xff0c;而 PTMs 的异常状态常常与人类疾病相关。在此&#xff0c;PTMD 2.0展示与疾病相关的 PTMs 综合数据库&#xff0c;其中包含 93 …

【Git版本控制器--3】Git的远程操作

目录 理解分布式版本控制系统 创建远程仓库 仓库被创建后的配置信息 克隆远程仓库 https克隆仓库 ssh克隆仓库 向远程仓库推送 拉取远程仓库 忽略特殊文件 为什么要忽略特殊文件&#xff1f; 如何配置忽略特殊文件&#xff1f; 配置命令别名 标签管理 理…

批量创建ES索引

7.x from elasticsearch import Elasticsearch# 配置 Elasticsearch 连接 # 替换为你的 Elasticsearch 地址、端口、用户名和密码 es Elasticsearch([http://10.10.x.x:43885],basic_auth(admin, XN272G9THEAPYD5N5QORX3PB1TSQELLB) )# # 测试连接 # try: # # 尝试获取集…

MySQL中的读锁与写锁:概念与作用深度剖析

MySQL中的读锁与写锁&#xff1a;概念与作用深度剖析 在MySQL数据库的并发控制机制中&#xff0c;读锁和写锁起着至关重要的作用。它们是确保数据在多用户环境下能够正确、安全地被访问和修改的关键工具。 一、读锁&#xff08;共享锁&#xff09;概念 读锁&#xff0c;也称为…

专利申请的价值

独占市场 一种产品只要授权专利权&#xff0c;等于在市场上拥有独占权。 政策奖励 各地方政府均出台响应文件&#xff0c; 对专利申请者进行奖励或者补助。 申报项目 申报高新技术企业、创新基金等 各类计划、项目的必要前提条件 专利申请 技术保护 防止新的技术与产品被他人 抄…

使用 OpenCV 和 Python 轻松实现人脸检测

目录 一、准备工作 二、加载人脸检测模型 三、读取图像并进行人脸检测 四、处理视频中的人脸检测 五、优化人脸检测效果 六、总结 在人工智能和计算机视觉领域,人脸检测是一项非常基础且重要的技术。通过人脸检测,我们可以在图像或视频中识别并定位人脸,进而进行后续的…

自然语言处理——从原理、经典模型到应用

1. 概述 自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;是一门借助计算机技术研究人类语言的科学&#xff0c;是人工智能领域的一个分支&#xff0c;旨在让计算机理解、生成和处理人类语言。其核心任务是将非结构化的自然语言转换为机器可以…

2025年新开局!谁在引领汽车AI风潮?

汽车AI革命已来。 在2025年伊始开幕的CES展上&#xff0c;AI汽车、AI座舱无疑成为了今年汽车行业的最大热点。其中不少车企在2025年CES上展示了其新一代AI座舱&#xff0c;为下一代智能汽车的人机交互、场景创新率先打样。 其中&#xff0c;东软集团也携带AI驱动、大数据支撑…

YOLO目标检测3

一. 参考资料 《YOLO目标检测》 by 杨建华博士 本篇文章的主要内容来自于这本书&#xff0c;只是作为学习记录进行分享。 二. 搭建YOLOv1的网络 2.1 YOLOv1的网络结构 作者带我们构建的YOLOv1网络是一个全卷积结构&#xff0c;其中不包含任何全连接层&#xff0c;这一点可以…

css3 svg制作404页面动画效果HTML源码

源码介绍 css3 svg制作404页面动画效果HTML源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果 效果预览 源码如下 <!doctype html> <html> <head> <meta charse…

LINUX 平台最快子网路由转发,内核使能选项配置

阅读本文之间&#xff0c;可线性参考以下文献。 Linux 命令行配置为单臂旁路由。_linux单臂路由-CSDN博客 Linux 软路由命令行配置&#xff08;参考&#xff09;_linux软路由-CSDN博客 VGW在 Windows 平台上局域网就绪的旁路由器程序_windows旁路由-CSDN博客 本文介绍 LINUX…

RNN实现阿尔茨海默症的诊断识别

本文为为&#x1f517;365天深度学习训练营内部文章 原作者&#xff1a;K同学啊 一 导入数据 import torch.nn as nn import torch.nn.functional as F import torchvision,torch from sklearn.preprocessing import StandardScaler from torch.utils.data import TensorDatase…

HackTheBox靶机:Sightless;NodeJS模板注入漏洞,盲XSS跨站脚本攻击漏洞实战

HackTheBox靶机&#xff1a;Sightless 渗透过程1. 信息收集常规探测深入分析 2. 漏洞利用&#xff08;CVE-2022-0944&#xff09;3. 从Docker中提权4. 信息收集&#xff08;michael用户&#xff09;5. 漏洞利用 Froxlor6. 解密Keepass文件 漏洞分析SQLPad CVE-2022-0944 靶机介…

docker安装elk6.7.1-搜集java日志

docker安装elk6.7.1-搜集java日志 如果对运维课程感兴趣&#xff0c;可以在b站上、A站或csdn上搜索我的账号&#xff1a; 运维实战课程&#xff0c;可以关注我&#xff0c;学习更多免费的运维实战技术视频 0.规划 192.168.171.130 tomcat日志filebeat 192.168.171.131 …

XML实体注入漏洞攻与防

JAVA中的XXE攻防 回显型 无回显型 cve-2014-3574