for (u=0; u<8; u++)
for ( v=0; v<8; v++)
{
temp=0.0;
for (x=0; x<8; x++)
for (y = 0; y < 8; y++)
temp+=(double)inblock[x][y]*cos((2*x+1)*u*pi/16)*cos((2*y+1)*v*pi/16);
}
还有优化的余地吗
不用优化了,循环次数这么少,也看不出什么效果了
for (int u = 0; u < 8 * 8; u++) {
double temp = 0.0;
for (int y = 0; y < 8*8; y++){
temp += (double)inblock[y/8][y%8]*cos((2*(y/8)+1)*(v/8)*pi/16)*cos((2*(y%8)+1)*(v%8)*pi/16);
}
}
我不能定义一个inblock【4096】【8】【8】吗?一运行就会出错
这还优化个屁啊 非要搞 那就研究一下三角函数的转换 看看转换之后是否好利于计算
double cosxy[8][8],te=pi/16.0;
for (x=0; x<8; x++)
for (y = 0; y < 8; y++)
cosxy[x][y]=cos((2*x+1)*y*te);
for (u=0; u<8; u++)
for ( v=0; v<8; v++)
{
temp=0.0;
for (x=0; x<8; x++)
for (y = 0; y < 8; y++)
temp+=(double)inblock[x][y]*cosxy[x][u]*cosxy[y][v];
}