深入理解计算机系统 第2章 习题解析 Part6
继续更新习题。
参考资料:
https://dreamanddead.gitbooks.io/csapp-3e-solutions/content/
Chapter 291A.
浮点数三个部分:
0 10000000 10010010000111111011011
所以二进制表示为
\begin{aligned}
V
&= 11.0010010000111111011011
\end{aligned}B.
\frac{22}7=3\frac 17=11.001001\ldots=2^1+2^0+\sum_{k=1}^{\infty} \frac 1{2^{3k}}C.
\frac{223}{71}=3\frac{10}{71}=11.001001000\ldots所以从小数点第9位后即不相等。
92#include <stdio.h>
#include <limits.h>
#include <math.h>
typedef unsigned float_bits;
/* Compute -f. If f is NaN, then return f. */ ...
国防科技大学 编译原理 第12讲 语法分析——自下而上分析3
课程主页:
https://www.icourse163.org/course/NUDT-1003101005?tid=1460976445
这次回顾第12讲:语法分析——自下而上分析3。
第12讲$LR(0)$分析表的构造$LR$分析法回顾$LR$分析法工作框架:
规范归约
定义:假定$α$是文法$G$的一个句子,我们称序列$α_n,α_{n-1},\ldots,α_0$是$α$的一个规范归约,如果此序列满足:
$α_n= α$
$α_0$为文法的开始符号,即$α_0=S$
对任何$i$,$0 ≤ i ≤ n$,$α_{i-1}$是从$α_i$经把句柄替换成为相应产生式左部符号而得到的
内容回顾短语、直接短语和句柄
定义:令$G$是一个文法,$S$是文法的开始符号,假定$\alpha\beta\delta$是文法$G$的一个句型,如果有
S\overset{\star}⇒αAδ 且 A\overset{+}⇒β则称$\beta$是句型$\alpha\beta\delta$相对于非终结符$A$的短语。
如果有${A} \Rightarrow \beta$, ...
深入理解计算机系统 第2章 习题解析 Part5
继续更新习题。
参考资料:
https://dreamanddead.gitbooks.io/csapp-3e-solutions/content/
Chapter 286
描述
值
十进制
最小的正非规格化数
0 0…0 0 0…01
$2^{-n+2-2^{k-1}}$
最小的正规格化数
0 0…01 1 0…0
$2^{2-2^{k-1}}$
最大的规格化数
0 1…10 1 1…1
$(2-2^{-n})\times 2^{2^{k-1} -1}$
计算过程:
最小的正非规格化数:
值:
0 0...0 0 0...01
十进制:
\begin{aligned}
s&=0\\
f&=2^{-n}\\
M&= 2^{-n}\\
E&= 1-(2^{k-1} - 1)=2-2^{k-1}\\
V&= 2^{-n+2-2^{k-1}}
\end{aligned}最小的正规格化数:
值:
0 0...01 1 0...0
十进制:
\begin{aligned}
s&=0\\
f&=0\\
M&=1+f = 1\\
E&= 1-(2^{k-1} - ...
国防科技大学 编译原理 第11讲 语法分析——自下而上分析2
课程主页:
https://www.icourse163.org/course/NUDT-1003101005?tid=1460976445
这次回顾第11讲:语法分析——自下而上分析2。
第11讲 语法分析—自下而上分析2(LR分析法)LR分析法概述自下而上分析法(Bottom-up)
基本思想
从输入串开始,逐步归约,直到文法的开始符号
归约:根据文法的产生式规则,把串中出现的产生式的右部替换成左部符号
从树叶节点开始,构造语法树
算符优先分析法
按照算符的优先关系和结合性质进行语法分析
适合分析表达式
LR分析法
规范归约:句柄作为可归约串
LR分析法
1965年由Knuth提出
L:从左到右扫描输入串
R:自下而上进行归约
工作框架如下:
句柄和规范归约短语、直接短语和句柄
定义:令$G$是一个文法,$S$是文法的开始符号,假定$\alpha\beta\delta$是文法$G$的一个句型,如果有
S\overset{\star}⇒αAδ 且 A\overset{+}⇒β则称$\beta$是句型$\alpha\beta\delta$相对于非 ...
国防科技大学 编译原理 第10讲 语法分析——自下而上分析1
课程主页:
https://www.icourse163.org/course/NUDT-1003101005?tid=1460976445
这次回顾第10讲:语法分析——自下而上分析1。
第10讲 语法分析——自下而上分析1自下而上分析的基本问题语法分析的方法
自上而下(Top-down)
从文法的开始符号出发,反复使用各种产生式,寻找”匹配”的推导
推导:根据文法的产生式规则,把串中出现的产生式的左部符号替换成右部
从树的根开始,构造语法树
递归下降分析法、预测分析程序
自下而上(Bottom-up)
从输入串开始,逐步进行归约,直到文法的开始符号
归约:根据文法的产生式规则,把串中出现的产生式的右部替换成左部符号
从树叶节点开始,构造语法树
算符优先分析法、LR分析法
自下而上分析示例考虑文法$\mathrm{G}(\mathrm{E})$:
\mathrm{E} \rightarrow \mathrm{i}|\mathrm{E}+\mathrm{E}| \mathrm{E}-\mathrm{E}\left|\mathrm{E}^{\star} \mathrm{E} ...
MIT 6.172 L3 Bit Hacks
课程主页:
https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-172-performance-engineering-of-software-systems-fall-2018/index.htm
课程视频:
https://www.bilibili.com/video/BV1wA411h7N7
这次回顾第三讲,这一讲介绍了位级的技巧。
Lecture 3 Bit Hacks二进制表示令
x=\left\langle x_{w-1} x_{w-2} \ldots x_{0}\right\rangle是$w$比特计算机单词。
如果$x$表示无符号整数,那么其对应的值为
x=\sum_{k=0}^{w-1} x_{k} 2^{k}如果$x$表示带符号整数,那么其对应的值为
x=\left(\sum_{k=0}^{w-2} x_{k} 2^{k}\right)-x_{w-1} 2^{w-1}特例:
考虑
x = 0b11...1
那么
\begin{aligned}
x &= ...
MIT 6.172 L2 Bentley Rules for Optimizing Work
课程主页:
https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-172-performance-engineering-of-software-systems-fall-2018/index.htm
课程视频:
https://www.bilibili.com/video/BV1wA411h7N7
这次回顾第二讲,这一讲介绍了减少工作量(work)的一些方法。
Lecture 2 Bentley优化工作规则工作量(work)
程序的工作量(在给定的输入上)是程序执行的所有操作的总和。
后续将介绍优化工作的”Bentley”规则,整体的规划如下:
数据结构打包和编码打包的思想是在一个机器字中存储多个数据值。编码的相关思想是将数据值转换成较少比特的表示。
例子:考虑日期数据“September 11, 2018”,该日期需要18比特表示。
编码日期:
如果我们只存储公元前4096年到公元4096年的日期,如果用数字表示日期,那么需要的位数为:
\left\lceil \lg \left( ...
国防科技大学 编译原理 第9讲 语法分析——自上而下分析3
课程主页:
https://www.icourse163.org/course/NUDT-1003101005?tid=1460976445
这次回顾第9讲:语法分析——自上而下分析3。
第9讲 语法分析——自上而下分析3(预测分析程序)预测分析程序的工作原理预测分析程序构成
总控程序,根据现行栈顶符号和当前输入符号,执行动作
分析表$M[A,a]$矩阵,$A ∈ V_N,a ∈ V_T$是终结符或$’\sharp’$
分析栈STACK,用于存放文法符号
预测分析过程
具体如下:
总控程序根据当前栈顶符号$X$和输入符号$a$,执行下列三动作之一:
若$X=a=’\sharp’$,则宣布分析成功,停止分析。
若$X=a \neq’\sharp’$,则把$X$从STACK栈顶逐出,让$a$指向下一个输入符号。
若$X$是一个非终结符,则查看分析表$M$。
若$M[X,a]$中存放着关于$X$的一个产生式,把$X$逐出STACK栈顶,把产生式的右部符号串按反序一一推进STACK栈(若右部符号为$\varepsilon$,则意味不推什么东西进栈)。
若$M[X,a]$中存放着“出错标志 ...
深入理解计算机系统 第2章 习题解析 Part4
继续更新习题。
参考资料:
https://code.woboq.org/gcc/libiberty/calloc.c.html
https://dreamanddead.gitbooks.io/csapp-3e-solutions/content/
Chapter 281#include <stdio.h>
int mode1(int k){
int res = (-1) << k;
return res;
}
int mode2(int k, int j){
//产生1^(w-k)0^(k);
int r1 = (-1) << (k);
//产生0^(w-k)1^(k);
int r2 = ~r1;
//产生0^(w-k-j)1^(k)1^(j);
int res = r2 << j;
return res;
}
int main(){
return 0;
}
82A:
错误,反例是x=I ...
国防科技大学 编译原理 第8讲 语法分析——自上而下分析2
课程主页:
https://www.icourse163.org/course/NUDT-1003101005?tid=1460976445
这次回顾第8讲:语法分析——自上而下分析2。
第8讲 语法分析——自上而下分析2(递归下降分析程序)构造递归下降分析器
分析程序由一组子程序组成, 对每一语法单位(非终结符)构造一个相应的子程序,识别对应的语法单位
通过子程序间的相互调用实现对输入串的识别
例如,$A \to BcD$
文法的定义通常是递归的,通常具有递归结构
定义全局过程和变量
ADVANCE:把输入串指示器IP指向下一个输入符号,即读入一个单词符号
SYM:IP当前所指的输入符号
ERROR:出错处理子程序
递归下降子程序设计一个简单的例子
A \rightarrow T E^{\prime}|B C| \varepsilon对应的递归下降子程序为:
更复杂的例子
现在考虑文法$G(E)$
\begin{aligned}
{E} &\rightarrow {TE}^{\prime} \\
{E}^{\prime}& \rightarrow+{TE}^{\pri ...
MIT 6.172 L1 Intro and Matrix Multiplication
课程主页:
https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-172-performance-engineering-of-software-systems-fall-2018/index.htm
课程视频:
https://www.bilibili.com/video/BV1wA411h7N7
最近入坑一门MIT讲软件性能的课程,看了下目录感觉挺实用的,后续会将其学完,这次回顾第一讲,主要是通过矩阵乘法的案例介绍课程主旨。
Lecture 1 介绍 & 矩阵乘法为什么学习软件性能哪些软件属性比性能更重要?
兼容性
功能
可靠性
正确性
可维护性
鲁棒性
清晰性
可调试性
模块化
便携性
可测试性
可用性
尽管如此,性能是计算的货币,通常可以用性能“购买”所需的属性。
来看下晶体管数和时钟频率随时间的变化:
从上图中可以看出,晶体管是线性增加的,但是时钟频率却不是,2004年之后时钟频率陷入瓶颈,这是因为如果时钟频率的缩放比例继续保持每年25%-30%的增长趋势,则功率密度 ...
深入理解计算机系统 第2章 习题解析 Part3
继续更新习题。
参考资料:
https://code.woboq.org/gcc/libiberty/calloc.c.html
https://dreamanddead.gitbooks.io/csapp-3e-solutions/content/
Chapter 272#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//有符号数和无符号数运算的结果为无符号数
void copy_int(int val, void *buf, int maxbytes){
if (maxbytes - sizeof(val) >= 0){
printf("copy_int copy successfully, size of val is %d, maxbytes is %d\n", sizeof(val), maxbytes);
memcpy(buf, (void *) &a ...