题目如下:
对多项式求值a0+a1*x+a2*x^2+...+an*x^n。
代码如下:
double poly(double a[], double x, int degree)
{
long int i;
double result = a[0];
double xpwr = x;
for ( i = 1; i <= degree; i++)
{
result += a[i] * xpwr;
xpwr = x * xpwr;
}
return result;
}
该题第二问说到,在参考机Core i7上,测量这个函数的CPE等于5.00。
参考答案是这样解释的:限制性能的计算是反复地计算表达式xpwr = x * xpwr。这需要一个双精度浮点数乘法(5个时钟周期),并且直到前一次迭代完成,下一次迭代的计算才能开始。两次连续的迭代之间,对result的更新只需要一个浮点加法(3个时钟周期)。
我的疑问是:为什么对result的更新只需要一个浮点加法,而不是需要一个浮点加法和一个浮点乘法a[i]*xpwr?
阅读(5123) | 评论(1) | 转发(1) |