CSAPP | Floating Point

2024-05-02 22:20
文章标签 point csapp floating

本文主要是介绍CSAPP | Floating Point,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

这篇关于CSAPP | Floating Point的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/955263

相关文章

时间序列|change point detection

change point detection 被称为变点检测,其基本定义是在一个序列或过程中,当某个统计特性(分布类型、分布参数)在某时间点受系统性因素而非偶然因素影响发生变化,我们就称该时间点为变点。变点识别即利用统计量或统计方法或机器学习方法将该变点位置估计出来。 Change Point Detection的类型 online 指连续观察某一随机过程,监测到变点时停止检验,不运用到

COD论文笔记 ECCV2024 Just a Hint: Point-Supervised Camouflaged Object Detection

这篇论文的主要动机、现有方法的不足、拟解决的问题、主要贡献和创新点: 1. 动机 伪装物体检测(Camouflaged Object Detection, COD)旨在检测隐藏在环境中的伪装物体,这是一个具有挑战性的任务。由于伪装物体与背景的细微差别和模糊的边界,手动标注像素级的物体非常耗时,例如每张图片可能需要 60 分钟来标注。因此,作者希望通过减少标注负担,提出了一种仅依赖“点标注”的弱

[学习笔记]《CSAPP》深入理解计算机系统 - Chapter 3 程序的机器级表示

总结一些第三章的一些关键信息 Chapter 3 程序的机器级表示结构 updating... Chapter 3 程序的机器级表示 局部变量通常保存在寄存器中,而不是内存中,访问寄存器比内存快的多. 有些时候,局部数据必须存放在内存中, 寄存器不足够存放所有的本地数据对一个局部变量使用地址运算符 &, 因此必须能够为它产生一个地址某些局部变量是数组或结构,因此必须能够通过数组或

POL(Point-of-Load)负载点电源

负载点(POL)电源在靠近负载处单独放置电源调节器(线性稳压器或DC-DC),解决了高性能半导体器件,例如:微控制器、ASIC等,所面临的高峰值电流、低噪声裕量等设计挑战。 一般我们会把负载点电源尽量靠近负载放置, 这么做可以最大限度地确保供电效率和准确性。 图 1 常见POL电源的拓扑结构 Typical设计POL设计

CSAPP Data Lab

CSAPP 的第一个 Lab,对应知识点为书中的第 2 章(信息的表示与处理),要求使用受限制的运算符和表达式实现一些位操作。主要分为两个部分:整数部分和浮点数部分。其中整数部分限制较多,比较偏重技巧性,部分题个人认为很有难度。而浮点数部分则比较基础,主要考察对 IEEE 754 标准的熟悉程度,代码较长,但思路相对简单。 bitXor 思路 使用德-摩根定律进行推导,推导过程如下: 代

【译】PCL官网教程翻译(17):快速点特征直方图(FPFH)描述符 -Fast Point Feature Histograms (FPFH) descriptors

英文原文阅读 快速点特征直方图(FPFH)描述符 计算复杂度直方图(见点特征直方图(PFH)描述符)对于一个给定的有 n n n个点的点云 P P P为 O ( n k 2 ) O (nk ^ 2) O(nk2), k k k是每个点P的最邻近点个数。对于要求实时或接近实时的应用程序,密集点的特征直方图的计算效率是一个一个主要问题。 本教程描述了PFH公式的简化,称为快速点特征直方图(FPF

【译】PCL官网教程翻译(16):点特征直方图(PFH)描述符 -Point Feature Histograms (PFH) descriptors

英文原网页查看。 点特征直方图(PFH)描述符 就点特征表示而言,表面法线和曲率估计是在表示特定点周围的基本的几何形状方面。虽然计算速度极快,也很容易,但是它们不能捕捉太多的细节,因为它们只能用很少的值来近似一个点的k邻域的几何形状。直接的结果是,大多数场景将包含许多具有相同或非常相似的特征值的点,从而减少了它们的信息特征。 本教程介绍了一组为简单起见而创建的3D特征描述符PFH(点特征直方图

【CVPR‘24】深度补全:Flexible Depth Completion for Sparse and Varying Point Densities

【CVPR'24】深度补全:Flexible Depth Completion for Sparse and Varying Point Densities 摘要1. 引言3. 方法3.1 基础深度估计架构3.2 基于亲和度的偏移校正3.3 校正置信度预测3.4 联合深度估计与完成3.5 损失 4. 实验4.1 数据集和评估指标4.2 实验概述4.3 消融研究 参考文献 摘要

mount: already mounted or busy. 、mount:already mounted or mount point busy.

错误:mount: already mounted or busy. 、mount:already mounted or mount point busy. 最近在装几台虚拟机,其中一台ubuntu,由于为了把磁盘文件分开,所以单独做了规划,单独mount,因为自己是一个优秀的销售员、创业者、经理人、程guan序li员yuan。所以直接copy了硬盘文件。由于mount后没写入fstab,所以m

Enhancing Octree-Based Context Models for Point Cloud Geometry Compression 论文笔记

1. 论文基本信息 发布于: IEEE SPL 2024 2. 创新点 分析了基于 one-hot 编码的交叉熵损失函数为什么不能准确衡量标签与预测概率分布之间的差异。介绍了 ACNP 模块,该模块通过预测占用的子节点数量来增强上下文模型的表现。实验证明了ACNP模块在基于八叉树的上下文模型中的有效性。 3. 背景 现有上下文模型的局限性: 现有的上下文模型使用交叉熵作为损失函