CSAPP | Floating Point

news2024/11/17 10:30:00

CSAPP | Floating Point

b i b_i bi b i − 1 b_{i-1} bi1 b 2 b_2 b2 b 1 b_1 b1 b 0 b_0 b0 b − 1 b_{-1} b1 b − 2 b_{-2} b2 b − 3 b_{-3} b3 b − j b_{-j} bj
S = ∑ k = − j i b k × 2 k S=\sum_{k=-j}^{i}b_k\times2^k S=k=jibk×2k

IEEE Standard 754

浮点数表示方法

v = ( − 1 ) s × M × 2 E v=(-1)^s\times M\times 2^E v=(1)s×M×2E
符号位 Sign: 0 表示正,1 表示负。
尾数 Significand M: ∈ [ 1.0 , 2.0 ) \in [1.0, 2.0) [1.0,2.0)
阶码 exponent: E 对浮点数加权,权重为 2 的 E 次幂。

浮点数分为三个域:符号、阶码、 尾数
sign (1 bit) | exponent (e bit) | fraction(or mantissa) (f bit)

sign 直接编码符号 s
k 位阶码字段 e x p = e k − 1 . . . e 1 e 0 exp=e_{k-1}...e_1e_0 exp=ek1...e1e0 编码了 E(但是不等同于 E)
n 位小数字段 f r a c = f n − 1 . . . f 1 f 0 frac=f_{n-1}...f_1f_0 frac=fn1...f1f0 编码了 M(但是不等同于 M)

规格化值

1.exp ≠ \neq = 000…0 and exp ≠ \neq = 111…1

2.阶码字段以 biased(偏置) 形式表示,E = Exp - Bias,Exp 为无符号数,Exp 的范围为 00000001 ∼ 11111110 0000 0001 \sim 1111 1110 0000000111111110 1 ∼ 254 1 \sim 254 1254。Bias 为 2 k − 1 − 1 2^{k-1}-1 2k11,由此产生的指数取值范围,单精度为 − 126 ∼ + 127 -126\sim +127 126+127,双精度为 − 1022 ∼ + 1023 -1022\sim +1023 1022+1023

3.小数字段 frac 被解释为描述小数值 f, f ∈ [ 0 , 1 ) f \in [0,1) f[0,1), 二进制表示为 0. f n − 1 . . . f 1 f 0 0.f_{n-1}...f_1f_0 0.fn1...f1f0。尾数定义为 M = 1 + f M=1+f M=1+f。可以把 M 看作为二进制表示为 1. f n − 1 . . . f 1 f 0 1.f_{n-1}...f_1f_0 1.fn1...f1f0

4.对于尾数,我们可以“抛掉”小数点左边的 1,只看右侧。M 最小的时候 frac = 000…0(M = 1.0),M 最大的时候 frac = 111…1(M = 2.0 - ε \varepsilon ε,也就是 1.111…1)
IEEE754浮点数阶码为什么需要偏置bias

Single precision: 32 bits

Double Precision: 64 bits

Example

对于浮点数 F = 15213.0
1521 3 10 15213_{10} 1521310
= 1110110110110 1 2 = 1110 1101 1011 01_2 =111011011011012
= 1.110110110110 1 2 × 2 13 =1.110 1101 1011 01_2 \times 2^{13} =1.11011011011012×213

Significand

M = 1.110110110110 1 2 M=1.110 1101 1011 01_2 M=1.11011011011012
f r a c = 1101101101101000000000 0 2 frac=110 1101 1011 01 0000 0000 00_2 frac=110110110110100000000002(23 bits)

Exponent

E = 13 E = 13 E=13 因为 2 的幂是 13
B i a s = 127 Bias=127 Bias=127 因为 float 单精度表示,k = 8, B i a s = 2 k − 1 − 1 = 2 7 − 1 = 127 Bias=2^{k-1}-1=2^7-1=127 Bias=2k11=271=127
E x p = 140 = 1000110 0 2 = E + B i a s Exp=140=10001100_2=E + Bias Exp=140=100011002=E+Bias

Result

0    10001100   1101101101101000000000 0 2 0~~10001100~110 1101 1011 01 0000 0000 00_2 0  10001100 110110110110100000000002
从左到右分别为 s exp frac

非规格化值

如果使用规格化数,总是使 M ≥ 1 M \geq 1 M1,就无法表示 0。而 +0.0 的浮点表示位模式为全 0。符号位为 0,阶码字段为 0,是一个非规格化值。然而此时 M = f = 0。如果符号位为 1,那么就是 -0.0。

1.exp = 000…0 成立

2.E = 1 - Bias

3.M = 0.xxx…x

特殊的值

e x p = 111...1 , f r a c = 000...0 exp = 111...1, frac=000...0 exp=111...1,frac=000...0 代表无穷大
e x p = 111...1 , f r a c ≠ 000...0 exp=111...1,frac\neq 000...0 exp=111...1,frac=000...0 N a N ( n o t   a   n u m b e r ) NaN(not~a~number) NaN(not a number) E.g. sqrt(-1)

Visualization: Floating Point Encodings


对于 8 位浮点数:
k = 4 , B i a s = 2 3 − 1 = 7 , E = 1 − B i a s = 1 − 7 = − 6 k = 4, Bias=2^3-1=7,E = 1-Bias=1-7=-6 k=4,Bias=231=7,E=1Bias=17=6

对于非规格化值:
E = 1 − B i a s E=1-Bias E=1Bias
0 0000 000,M = 0, 0 × 2 − 6 = 0 0 \times 2^{-6} = 0 0×26=0
0 0000 001, M = 1 × 2 − 3 = 1 8 , 1 8 × 1 2 6 = 1 512 M=1\times 2^{-3}=\frac{1}{8}, \frac{1}{8} \times \frac{1}{2^6} = \frac{1}{512} M=1×23=81,81×261=5121

0 0000 111 为非规格化值所能表示的最大值
对于规格化值:
E = e x p − B i a s E=exp-Bias E=expBias
0 0001 000 此时 e x p = 1 , E = e x p − B i a s = 1 − 7 = − 6 , f r a c = 000 , M = 1.000 exp=1, E=exp-Bias=1-7=-6,frac=000,M=1.000 exp=1,E=expBias=17=6,frac=000,M=1.000,这是最小的规格化值。

Rounding

IEEE 现在有四种舍入方式,分别为 向零舍入、向下舍入、向上舍入、就近舍入(默认)

如何理解就近舍入?

当为中间数,要向最近的偶数(舍入后保留的最低有效位是偶数)舍入。

对于 7.8950000,9 是一个奇数,所以向上舍入。
对于 7.8850000,8 是一个偶数,所以向下舍入。

二进制数截断


对于 10.1110 0 2 10.11100_2 10.111002 如果直接截断,则为 10.11 是个奇数,所以应该加上 0.001

乘法

( ( − 1 ) s 1 × M 1 × 2 E 1 ) × ( ( − 1 ) s 2 × M 2 × 2 E 2 ) ((-1)^{s1}\times M1 \times 2^{E1}) \times ((-1)^{s2}\times M2 \times 2^{E2}) ((1)s1×M1×2E1)×((1)s2×M2×2E2)
S i g n   s : s 1 ⊕ s 2 Sign~s: s1 \oplus s2 Sign s:s1s2
S i g n i f i c a n d   M : M 1 × M 2 Significand~M:M1 \times M2 Significand M:M1×M2
E x p o n e n t   E : E 1 + E 2 Exponent~E: E1 + E2 Exponent E:E1+E2

如果 M ≥ \geq 2,则须有右移位同时增加指数,来让尾数在 1 和 2 之间。
如果 E 超出范围,则会溢出到无穷大。
如果 M 有太多位,则需要就近舍入。

(3.14 + 1e10) - 1e10 = 0
3.14 + (1e10 - 1e10) = 3.14
1e20 ∗ * (1e20 - 1e20) = 0.0

Questions

int x = ...;
float f = ...;
double d = ...;

x == (int)(float) x; // False, 在浮点数的 frac 区域没有足够的位来表示 int,会舍入
x == (int)(double) x; // True
f == (float)(double) f; // True
d == (double)(float) d; // False
f == -(-f); // True
2 / 3 == 2 / 3.0 // False, 2/3=0, 2/3.0 是一个浮点数
d < 0.0 -> ((d * 2) < 0.0) // Yes, 即使 d * 2 溢出到负无穷大,也是小于 0
d > f -> -f > -d // Yes
d * d >= 0.0 // Yes
(d + f) - d == f // No

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

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

相关文章

目标检测算法YOLOv6简介

YOLOv6由Chuyi Li等人于2022年提出&#xff0c;论文名为&#xff1a;《YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications》&#xff0c;论文见&#xff1a;https://arxiv.org/pdf/2209.02976 &#xff0c;项目网页&#xff1a;https://github.c…

67万英语单词学习词典ACCESS\EXCEL数据库

这似乎是最多记录的英语单词学习词典&#xff0c;包含复数、过去分词等形式的单词。是一个针对想考级的人员辅助背单词学英语必备的数据&#xff0c;具体请自行查阅以下的相关截图。 有了数据才能想方设法做好产品&#xff0c;结合权威的记忆理论&#xff0c;充分调动用户的眼…

GD32F103RCT6/GD32F303RCT6(9)高级定时器互补PWM波输出实验

本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发 后续项目主要在下面该专栏中发布&#xff1a; 手把手教你嵌入式国产化_不及你的温柔的博客-CSDN博客 感兴趣的点个关注收藏一下吧! 电机驱动开发可以跳转&#xff1a; 手把手教你嵌入式国产化-实战项目-无刷电机驱动&am…

Linux网络编程(四) 同时处理一个端口的UDP与TCP连接

从bind系统调用的参数来看&#xff0c;一个socket只能与一个socket地址绑定&#xff0c;即一个socket只能用来监听一个端口。因此&#xff0c;服务器如果要同时监听多个端口&#xff0c;就必须创建多个socket&#xff0c;并将它们分别绑定到各个端口上。这样一来&#xff0c;服…

Github下载的项目使用

根据该视频整理GitHub上的项目要怎么运行&#xff1f;一个视频教会你&#xff01;_哔哩哔哩_bilibili 方法一&#xff1a;从release中找。 方法二&#xff1a; 从官网中找&#xff08;位于右上角&#xff09; 方法三&#xff1a;看readme&#xff08;从readme中搜索以下词汇&a…

Milvus Cloud 的RAG 的广泛应用及其独特优势

一个典型的 RAG 框架可以分为检索器(Retriever)和生成器(Generator)两块,检索过程包括为数据(如 Documents)做切分、嵌入向量(Embedding)、并构建索引(Chunks Vectors),再通过向量检索以召回相关结果,而生成过程则是利用基于检索结果(Context)增强的 Prompt 来激…

【Qt 开发基础体系】字符串类应用和常用的数据类型

文章目录 1. Qt 字符串类应用1.1 操作字符串1.2 QString::append()函数1.3 QString::sprintf()函数1.4 QString::arg()函数 2. 查询字符串2.1 函数 QString::startsWith()2.2 函数 QString::contains()2.3 函数 QString::toInt()2.4 函数 QString::compare()2.5 将 QString 转换…

Github 50k star!吴恩达联合OpenAi共同编写<面向开发者的LLM入门教程> PDF推荐!

今天给大家推荐一本由吴恩达和OpenAI团队共同编写的关于大型语言模型&#xff08;LLM&#xff09;的权威教程<面向开发者的LLM入门教程>&#xff01;&#xff0c;在Github上已经高达50k star了&#xff0c;这含金量不用多说&#xff0c;在这里给大家强烈推荐一波&#xf…

电脑文件怎么加密?电脑涉密文件加密方法

文件加密是保护电脑涉密文件的重要方法&#xff0c;可以有效避免文件泄露风险。那么&#xff0c;电脑涉密文件该怎么加密呢&#xff1f;下面我们就来了解一下吧。 超级加密3000 在加密电脑涉密文件时&#xff0c;首先需要考虑的就是文件加密的安全性。因此&#xff0c;我们可以…

2024挂耳式耳机怎么选?5款高性价比开放式耳机推荐榜

近年来&#xff0c;开放式耳机受到了越来越多人的关注&#xff0c;特别是对于运动爱好者来说&#xff0c;在运动的过程中&#xff0c;传统的有线耳机不适合户外运动&#xff0c;不仅佩戴不稳&#xff0c;线还容易缠绕&#xff0c;而普通的蓝牙耳机长时间佩戴会感觉耳朵不适。在…

基于短时傅里叶变换域的一维信号邻域降噪方法(MATLAB)

基于傅里叶变换的信号频域表示及能量频域分布揭示了信号在频域的特征&#xff0c;但傅里叶变换是一种整体变换&#xff0c;只能了解信号的全局特性&#xff0c;不能有效检测信号频率随时间的变化情况。只有把时域和频域结合起来才能更好地反映非平稳信号的特征。时频分析的基本…

机器学习 - 梯度下降算法推导

要逐步推导多变量线性回归的梯度计算过程&#xff0c;我们首先需要明确模型和损失函数的形式&#xff0c;然后逐步求解每个参数的偏导数。这是梯度下降算法核心部分&#xff0c;因为这些偏导数将指导我们如何更新每个参数以最小化损失函数。 模型和损失函数 考虑一个多变量线…

Linux:进程通信(三)信号的捕捉

目录 一、信号捕捉函数 1、signal函数 2、sigaction函数 二、用户态与内核态 1、用户态 2、内核态 用户态与内核态转换 三、volatile关键字 四、SIGCHLD信号 一、信号捕捉函数 1、signal函数 signal函数是C语言标准库中的一个函数&#xff0c;用于处理Unix/Linux系…

web自动化系列-selenium执行js脚本|截图|识别验证码(十五)

1.执行脚本 如果你定位的元素通过各种方法都无法完成页面操作&#xff0c;最后的方法就是通过操作js脚本来完成 。 在selenium中提供了一个方法 &#xff0c;这个可以方法可以自行JS的脚本 。具体为&#xff1a; execute_script(js脚本) &#xff1a; js脚本代表要执行的脚本…

OC类与对象(下)

OC类与对象&#xff08;下&#xff09; 文章目录 OC类与对象&#xff08;下&#xff09;不是包装类的NSValue 和NSNumber处理对象打印对象和description方法 和 isEqual方法 类别类别语法部分利用类别进行模块化设计使用类别来调用私有方法 类的扩展协议与委托规范&#xff0c;…

BLIP和BLIP2 论文讲解

文章目录 BLIPIntroductionMethod模型架构预训练目标字幕和过滤&#xff08;Capfilt&#xff09; BLIP2IntroductionMethod模型结构Q-Former预训练第一阶段Q-Former预训练第二阶段 BLIP 论文&#xff1a; 《BLIP: Bootstrapping Language-Image Pre-training for Unified Visio…

Unity打开安卓设备不同的设置面板

1&#xff0c;打开安卓设备不同的设置面板&#xff0c;我还贴心的把Android官网的链接放下面了 2&#xff0c;使用也很方便&#xff1a;unity按钮事件上拖这个脚本&#xff0c;注册MyOpenAndroidSettings方法&#xff0c;参数 填 和枚举值相应的数字 // 功能&#xff1a;打开…

【c++】线程池的原理及实现

&#x1f4bb;文章目录 &#x1f4c4;前言线程池的原理概念工作原理 线程池的实现线程池的基础结构任务队列的实现工作线程的实现 线程池的应用与拓展线程池的拓展 &#x1f4d3;总结 &#x1f4c4;前言 不知道各位是否有试过点进限时抽奖网站、抢票网站呢&#xff1f;你是否好…

静态分析-RIPS-源码解析记录-02

这部分主要分析scanner.php的逻辑&#xff0c;在token流重构完成后&#xff0c;此时ini_get是否包含auto_prepend_file或者auto_append_file 取出的文件路径将和tokens数组结合&#xff0c;每一个文件都为一个包含require文件名的token数组 接着回到main.php中&#xff0c;此时…

一款功能强大的网络安全综合工具-PotatoTool

一、 简介 这款工具是一款功能强大的网络安全综合工具&#xff0c;旨在为安全从业者、红蓝对抗人员和网络安全爱好者提供全面的网络安全解决方案。它集成了多种实用功能&#xff0c;包括解密、分析、扫描、溯源等&#xff0c;为用户提供了便捷的操作界面和丰富的功能选择。 二…