我有一个私人的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;
}
答案 0 :(得分:2)
我看到了两种加速计算的方法。
条件分支可能会减慢现代流水线处理器的计算速度,因此避免条件可能会加快速度。有关一些解释,请参阅Why is processing a sorted array faster than an unsorted array?。
使用Horner's Method可以节省乘法次数。
放在一起,这些导致:
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;
}