优化循环的方法-循环展开

简介: 优化循环的方法-循环展开

更多文章

循环展开是一种程序变换,通过增加每次迭代计算的元素的数量,减少循环的迭代次数。

用代码来说明就是将

for (i = 0; i < len; i++) {
    sum += arry[i]
}

替换为

for (i = 0; i < len; i += 2) {
    newSum += arry[i] + arry[i + 1]
}

循环展开对于算术运算来说,优化的作用是很大的。我分别对整数运算和浮点数运算作了多次测试,得出表格如下:

操作 整数 整数(优化后) 浮点数 浮点数(优化后)
+ 360 163 354 164
- 379 167 341 177
* 350 160 364 163
/ 118 57 152 63

测试环境

  • cpu:i5-7400
  • 浏览器: chrome 70.0.3538.110

运算是用了1千万个数,取值是运行十次测试得出的平均数。附上加法测试的代码

const arry = []
let num = 10000000
while (num) {
    arry.push(num)
    num--
}
let sum = 0
let last = new Date()
let i 
let len = arry.length
for (i = 0; i < len; i++) {
    sum += arry[i]
}
let now = new Date()
console.log(now - last)
let newSum = 0
last = new Date()
for (i = 0; i < len; i += 2) {
    newSum += arry[i] + arry[i + 1]
}
now = new Date()
console.log(now - last)
目录
相关文章
|
5月前
|
C语言
循环迭代判断\丢番图
循环迭代判断\丢番图
27 2
|
Java
常见的for循环优化方式
经常使用一些循环,进行耗时计算的操作,特别是 for 循环,它是一种重复计算的操作,如果处理不好,耗时就比较大,如果处理书写得当,将大大提高效率,下面总结几条 for 循环的常见优化方式。
123 0
|
6月前
while循环和do while循环有什么区别
while循环和do while循环有什么区别
80 0
|
存储 算法 数据处理
for 循环嵌套 for 循环,你需要懂的代码性能优化技巧!
本篇分析的技巧点其实是比较常见的,但是最近的几次的代码评审还是发现有不少兄弟没注意到。 所以还是想拿出来说下。
233 4
|
缓存 索引
这 11 个 for 循环优化你得会
这 11 个 for 循环优化你得会
while循环和do while循环有什么区别?
while循环和do while循环有什么区别?
139 0
|
缓存 算法 Java
使用迭代优化递归程序
大家好,我是王有志。 今天我们将会分析上篇文章中递归算法存在的问题,并通过迭代去优化。
106 1
使用迭代优化递归程序
|
Java
三种循环的区别
三种循环的区别
84 0
|
前端开发 程序员
大量if else判断如何优化?@Valib详解
大量if else判断如何优化?@Valib详解
大量if else判断如何优化?@Valib详解