TI中文支持网
TI专业的中文技术问题搜集分享网站

-O2导致计算结果出错,很简单的程序

我的程序很简单,如下,当使用O2,O3优化级别时计算结果有误,使用O1时就没问题,请问下是什么原因呢?该怎么解决?

//***************************************************************************************************************************

 float DSPF_dp_sp_dotprod( float * x,   float * y,  int nx)
{
     int i;
     float sum = 0;

    _nassert(nx >= 0);
    _nassert(nx % 4 == 0);

    for(i=0;i<nx;i++)
    {
     sum += x[i]*y[i];
    }

    return (sum);
}

float a[600],b[600];
volatile float c1=0,c2=0,yt1,yt2,yt;

void main()
{
 int i;
 for(i=0;i<600;i++)
 {
  a[i]=1.0/(i+1.0);
  b[i]=i*2.1;
 }

 c1=DSPF_dp_sp_dot(a,b,600);
}

xu shi:

补充下,使用的平台是DSP C6748,已经是最新版本的编译器7.4.5

kooking:

请问有什么错误提示没,一般来说o3有可能引起错误,o2应该还好,另外,可以把里面的循环去了看看还会不会有错

xu shi:

回复 kooking:

编译并没有报错,只是最后的计算结果c1出错了,去掉里面的循环对不对都已经没有意义了,而且这个函数DSPF_dp_sp_dotprod是从TI官方提供的C674X DSPLIB里面直接拿出来没改过的

赞(0)
未经允许不得转载:TI中文支持网 » -O2导致计算结果出错,很简单的程序
分享到: 更多 (0)