csapp2.4节——浮点数

目录

二进制小数

十进制小数转二进制小数

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.rhkb.cn/news/9296.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在php中怎么打开OpenSSL

&#xff08;点击即可进入聊天助手&#xff09; 背景 在使用php做一些项目时,有用到用户邮箱注册等,需要开启openssl的能力 在php系统中openssl默认是关闭状态的,在一些低版本php系统中,有的甚至需要在服务器终端后台,手动安装 要打开OpenSSL扩展&#xff0c;需要进行以下步骤 …

Rust语言进阶之zip用法实例(九十五)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

[权限提升] Windows 提权 — 系统内核溢出漏洞提权

关注这个框架的其他相关笔记&#xff1a;[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01&#xff1a;系统内核溢出漏洞提权介绍 注意&#xff1a;提权很容易让电脑蓝屏&#xff0c;所以如果是测试的话&#xff0c;提权前最好做好系统备份。 溢出漏洞就像是往杯子里装水 —— 如…

Windows11 安装poetry

使用powershell安装 (Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py - 如果使用py运行失败则替换为python即可 终端运行结果如下 D:\AI\A_Share_investment_Agent> (Invoke-WebRequest -Uri https://install.python-poetry.…

系统思考—心智模式

“我们的大脑对连贯性的渴望远胜于对准确性的追求。”—诺贝尔经济学得主丹尼尔卡尼曼 在面对复杂的决策时&#xff0c;我们往往更倾向于寻找那些能够迅速串联起来的信息&#xff0c;而非深入挖掘每一个细节的真实性。这种倾向在日常生活中或许能帮助我们迅速作出决策&#xf…

基于ollama,langchain,springboot从零搭建知识库三【解析文档并存储到向量数据库】

安装环境 安装pgvector&#xff0c;先设置docker镜像源&#xff1a; vim /etc/docker/daemon.json {"registry-mirrors": ["https://05f073ad3c0010ea0f4bc00b7105ec20.mirror.swr.myhuaweicloud.com","https://mirror.ccs.tencentyun.com",&…

Mac m1,m2,m3芯片使用nvm安装node14报错

使用nvm安装了node 12/16/18都没有问题&#xff0c;到14就报错了。第一次看到这个报错有点懵&#xff0c;查询资料发现是Mac芯片的问题。 Issue上提供了两个方案&#xff1a; 1、为了在arm64的Mac上安装node 14&#xff0c;需要使用Rosseta&#xff0c;可以通过以下命令安装 …

学习数据结构(2)空间复杂度+顺序表

1.空间复杂度 &#xff08;1&#xff09;概念 空间复杂度也是一个数学表达式&#xff0c;表示一个算法在运行过程中根据算法的需要额外临时开辟的空间。 空间复杂度不是指程序占用了多少bytes的空间&#xff0c;因为常规情况每个对象大小差异不会很大&#xff0c;所以空间复杂…

使用 KNN 搜索和 CLIP 嵌入构建多模态图像检索系统

作者&#xff1a;来自 Elastic James Gallagher 了解如何使用 Roboflow Inference 和 Elasticsearch 构建强大的语义图像搜索引擎。 在本指南中&#xff0c;我们将介绍如何使用 Elasticsearch 中的 KNN 聚类和使用计算机视觉推理服务器 Roboflow Inference 计算的 CLIP 嵌入构建…

知识库管理驱动企业知识流动与工作协同创新模式

内容概要 知识库管理在现代企业中扮演着至关重要的角色&#xff0c;其价值不仅体现在知识的积累&#xff0c;还在于通过优质的信息流动促进协作与创新。有效的知识库能够将分散的信息整合为有序、易于访问的资源&#xff0c;为员工提供实时支持&#xff0c;进而提升整体工作效…

十年筑梦,再创鲸彩!庆祝和鲸科技十周年

2025 年 1 月 16 日&#xff0c;“十年筑梦&#xff0c;再创鲸彩” 2025 和鲸科技十周年庆暨 2024 年终表彰大会圆满落幕。 十年征程&#xff0c;和鲸科技遨游于科技蓝海&#xff0c;破浪前行&#xff0c;无惧风雨。期间所取得的每一项成就&#xff0c;都凝聚着全体成员的智慧结…

【javaweb项目idea版】蛋糕商城(可复用成其他商城项目)

该项目虽然是蛋糕商城项目&#xff0c;但是可以复用成其他商城项目或者购物车项目 想要源码的uu可点赞后私聊 技术栈 主要为&#xff1a;javawebservletmvcc3p0idea运行 功能模块 主要分为用户模块和后台管理员模块 具有商城购物的完整功能 基础模块 登录注册个人信息编辑…

基于特征工程与转换方法的LightGBM资产预测研究

“Assets Forecasting with Feature Engineering and Transformation Methods for LightGBM” 论文地址&#xff1a;https://arxiv.org/pdf/2501.07580 摘要 股票市场的波动对经济和消费市场影响重大&#xff0c;精准预测显得尤为重要。研究指出&#xff0c;尽管深度学习与机器…

抖音上线打车服务?抖音要大规模杀入网约车了吗?

最近几年&#xff0c;伴随着市场的发展日益壮大&#xff0c;网约车已经成为了不少人熟悉的出行方式&#xff0c;就在大家以为网约车赛道已经日渐成熟的时候&#xff0c;抖音上线打车服务的消息传来&#xff0c;让人不禁疑惑&#xff0c;抖音要大规模杀入网约车了吗&#xff1f;…

Time Constant | RC、RL 和 RLC 电路中的时间常数

注&#xff1a;本文为 “Time Constant” 相关文章合辑。 机翻&#xff0c;未校。 How To Find The Time Constant in RC and RL Circuits June 8, 2024 &#x1f4a1; Key learnings: 关键学习点&#xff1a; Time Constant Definition: The time constant (τ) is define…

neo4j-community-5.26.0 install in window10

在住处电脑重新配置一下neo4j, 1.先至官方下载 Neo4j Desktop Download | Free Graph Database Download Neo4j Deployment Center - Graph Database & Analytics 2.配置java jdk jdk 21 官网下载 Java Downloads | Oracle 中国 path: 4.查看java -version 版本 5.n…

windows lm studio 0.3.8无法下载模型,更换镜像

2025年1月28日22:13:35 系统是windows11 安装的时候记得选择 仅为我安装&#xff0c;不然后续操作可能无法进行&#xff0c;因为两种方式的默认安装目录不一样 将模型文件放入 LM Studio 的模型目录&#xff1a; 下载完成后&#xff0c;将模型文件放入 LM Studio 的模型存…

hive:数据导入,数据导出,加载数据到Hive,复制表结构

hive不建议用insert,因为Hive是建立在Hadoop之上的数据仓库工具&#xff0c;主要用于批处理和大数据分析&#xff0c;而不是为OLTP&#xff08;在线事务处理&#xff09;操作设计的。INSERT操作会非常慢 数据导入 命令行界面:建一个文件 查询数据>>复制>>粘贴到新…

力扣【669. 修剪二叉搜索树】Java题解

一开始在想为什么题目说存在唯一答案。然后发现是二叉搜索树就合理了。如下图&#xff1a;如果0节点小于low&#xff0c;那其左子树也都小于low&#xff0c;故可以排除&#xff1b;对于4&#xff0c;其右子树也是可以排除。 代码如下&#xff1a; class Solution {public Tre…

Linux 非阻塞IO

Linux 非阻塞IO 1. fcntl() 在Linux操作系统中&#xff0c;fcntl() 是一个用于操作文件描述符的系统调用。它提供了多种功能&#xff0c;包括控制文件描述符的属性、管理文件锁定、设置文件的非阻塞模式等。 本文只截取了用于IO模型的 fcntl() 部分内容&#xff0c; fcntl() …