高效的多项式结果

时间:2014-04-06 17:00:53

标签: c++ math optimization

我有一个私人的Multinomial课程:

unsigned int power;
double *factors;

我想知道对于给定的参数,是否有更有效的方法来计算多项式的结果?

我目前的代码是:

double Multinomial::calculateFor(double x) const{
    double sum = this->factors[0];
    double prod = 1;
    for(size_t i = 1; i <= this->power; i++){
        prod *= x;
        if(this->factors[i]){
            sum += this->factors[i] * prod;
        }
    }
    return sum;
}

1 个答案:

答案 0 :(得分:2)

我看到了两种加速计算的方法。

  1. 条件分支可能会减慢现代流水线处理器的计算速度,因此避免条件可能会加快速度。有关一些解释,请参阅Why is processing a sorted array faster than an unsorted array?

  2. 使用Horner's Method可以节省乘法次数。

  3. 放在一起,这些导致:

    double Multinomial::calculateFor(double x) const
    {
        double sum = this->factors[this->power];
        for (size_t i = this->power; i > 0; )
            sum = this->factors[--i] + sum * x;
        return sum;
    }