首页 > 试题广场 >

考虑下面的计算n个双精度数组成的数组乘积的函数。我们3次展

[问答题]
 考虑下面的计算n个双精度数组成的数组乘积的函数。我们3次展开这个循环。
double aprod(double a[], long n) [
   long i;
   double x,y, z;
   double r = 1;
   for (i = 0;1< n-2;1+=3) {
    x=a[i]; y = a[i+1]; z=a[i+2];
    r=r*x*y*z;  /*Product computation */
     }
   for (;i < n; i++)
     r *=a[i] ;
   return r;
}
      对于标记为Product computation的行,可以用括号得到该计算的五种不同的结合,如下所示:
 r=((r*x)*y)*z;  /*A1*/
 r=(r*(x*y))*z;  /*A2*/
 r=r*((x*y)*z);  /*A3*/
 r=r*(x*(y*z));  /*A4*/
 r=(r*x)*(y*z);  /*A5*/
 假设在一台浮点数乘法延迟为5个时钟周期的机器上运行这些函数。确定由乘法的数据相关限定的CPE的下界。(提示:画出每次迭代如何计算r的图形化表示会所帮助。》

这道题你会答吗?花几分钟告诉大家答案吧!