c++中如何判断一个浮点数是否为0?
判断是否在一个误差范围内:
cpp const float eps = 1e-6; if(abs(x) < eps) { // x is nearly zero }舍入到整数再判断:
cpp float x = 0.00001; if(round(x) == 0) { // x is nearly zero }
c++如何提高多重循环的效率?
一、实例化变量尽量放在for循环体外,只实例化一次。
二、普通变量改为寄存器变量,如i++改为++i。前置递增运算避免了不必要的工作,它把值加1后直接返回改变了运算对象本身。
三、条件比较使用<要快于<=,同理>要快于<=。
四、把外层可以计算的尽可能放到外层;有判断条件的语句与循环不相关的操作语句尽量放在for外面。
五、应将最长的循环放在最内层,循环次数最少的放在最外层,以减少CPU跨切循环层的次数。
编译原理中优化主要是做什么的?
循环优化:改进循环结构,删除不必要的循环
公共子表达式消除:检测重复的表达式并重用计算结果
内存优化:合并内存访问,优化数据在内存中的布局
编译器自身优化:优化编译器的内部数据结构,加速编译过程
编译原理中每个步骤主要做什么?
1. 词法分析词法分析阶段将源代码分割成词法单元(标识符、关键字、运算符等),生成词法表。主要作用是进行词法错误检查,并为语法分析生成输入。
2. 语法分析 语法分析阶段根据上下文无关文法构建语法树,检查语法错误,并保存程序语义。这是编译的核心部分。
3. 语义分析在语法树的基础上进一步检验语义,如类型检查、作用域resolution等。确保程序语义的正确性。
4. 中间代码生成将源代码转换成中间表示,如三地址码。中间代码去除源语言特定结构,为后端代码优化和生成做准备。
5. 代码优化在中间代码的基础上进行各种优化,如常量传播、循环优化、内联代换等。生成更高效的目标代码,不改变程序语义。
6. 目标代码生成将优化后的中间代码转换成目标机器代码指令,完成代码生成。目标代码可直接在特定平台上运行。
标签:代码生成,编译,计算机,记录,语义,词法,面试,循环,优化 From: https://www.cnblogs.com/yccy/p/17724110.html