[C++]opencv 里计算多项式用的算式...

初看OpenCV写多项式的算式有点晦涩难懂,形如(((z3y2 + z2)y2+z1)*y2)来表示一个二次到六次的偶次多项式,这样的算式究竟快在哪里?今天正好比较闲,就拿来跑一跑,供大家参考(但其实意义不大),代码如下所示:

#include<iostream>
#include<time.h>
using namespace std;
int main(){
    clock_t t1,t2;
    t1 = clock();
    double x = 1.2,y = 1.2, x2, y2, k1, k2;
    double z1 = 0.98345,z2 = 0.32355,z3 = 0.22234;
    for(int i = 0;i < 10000000;i++,x+=1.0){
        x2 = x*x;
        k1 = 1 + (z1*x2 + z2*x2*x2 + z3*x2*x2*x2);
        //k1 = 1 + (((x2 + 1)*x2+1)*x2);
    }
    t2 = clock();
    cout<<(int)(t2-t1)<<endl;
    t1 = clock();
    for(int i = 0; i < 10000000;i++,y+=1.0){
        y2 = y*y;
        //k2 = 1 + (y2 + y2*y2 + y2*y2*y2);//如果没有系数,这个会更快
            k2 = 1 + (((z3*y2 + z2)*y2+z1)*y2);// to compute polynomial
    }
    t2 = clock();
    //cout<<(int)t2<<endl;
    cout<<(int)(t2-t1)<<endl;
}

结果分别如下所示,单位是 clock

265
234

并且,如果没有系数,会比正常计算还要慢。而且这以经是一千万级别了,一半图像大小基本也是这个级数的,才快三十个时钟,基本上要几千张图才有微小的加速感知...好吧,确实是快了,佩服佩服。

猜你喜欢

转载自www.cnblogs.com/drunknbeard/p/9861284.html