作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个指数移动平均线,它被调用了数百万次,因此是我的代码中最昂贵的部分:
double _exponential(double price[ ], double smoothingValue, int dataSetSize)
{
int i;
double cXAvg;
cXAvg = price[ dataSetSize - 2 ] ;
for (i= dataSetSize - 2; i > -1; --i)
cXAvg += (smoothingValue * (price[ i ] - cXAvg)) ;
return ( cXAvg) ;
}
最佳答案
哎哟!
当然,多线程可以提供帮助。但是您几乎可以肯定地提高单线程计算机上的性能。
首先,您计算的方向错误。只有最先进的机器才能进行负步预取。几乎所有的机器速度都更快。即更改阵列的方向,以便从低到高而不是从高到低扫描几乎总是更好。
接下来,重写一下-请允许我缩短变量名称以使其易于键入:
avg = price[0]
for i
avg = s * (price[i] - avg)
avg0 = p0
avg1 = s*(p1-p0)
avg2 = s*(p2-s*(p1-p0)) = s*(p2-s*(p1-avg0))
avg3 = s*(p3-s*(p2-s*(p1-p0))) = s*p3 - s*s*p2 + s*s*avg1
avg[i] = s*p[i] - s*s*p[i-1] + s*s*avg[i-2]
avg[i] = s*p[i] - s*s*(p[i-1] + s*s*avg[i-2])
avg[i] = (s*p[i] - s*s*p[i-1]) + s*s*avg[i-2])
avg0 = p0
avg1 = s*(p1-p0)
/*avg2=reuses*/avg0 = s*(p2-s*(p1-avg0))
/*avg3=reusing*/avg3 = s*p3 - s*s*p2 + s*s*avg1
for i from 2 to N by 2 do
avg0 = s*p3 - s*s*p2 + s*s*avg0
avg1 = s*p3 - s*s*p2 + s*s*avg1
avg1 = s*p3 - s*s*p2 + s*s*avg1
avg1 = s*(p3 - s*(p2 + avg1))
avg1 = s*p3 - s2*(*p2 + avg1)
s2 = s*s
关于performance - 指数移动平均线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7947352/
我是一名优秀的程序员,十分优秀!