不接受双精度值的双精度数组

A double array not receiving double value

本文关键字:双精度 数组 不接受      更新时间:2023-10-16

我有这个代码(我从FFT开发的),它似乎很好,根据Visual Studio…但是,当它到达块[a][b]必须接收值的点时(即使它不是pow(),而只是exp_final,例如),块[a][b]的值不符合我的期望。

来源在这里。

void twiddle_factor(float *d_isub_matrix)
{

    double block[THREAD_SIZE][THREAD_SIZE];
    float *d_osub_matrix = new float[THREAD_SIZE*THREAD_SIZE];
    int a,b,c,d,x,y,z;

    float sum_sines=0.0;
    double expo1,expo2,expo_final;
    float sum_cosines=0.0;
    float sum_sin[THREAD_SIZE][THREAD_SIZE],sum_cos[THREAD_SIZE][THREAD_SIZE];
    float angle=(2*PI)/THREAD_SIZE;
    //put into shared memory the FFT calculation (F(u))
    for(x=0;x<THREAD_SIZE;x++)
    {
        for(y=0;y<THREAD_SIZE;y++)
        {
            for(z=0;z<THREAD_SIZE;z++)
            {
                sum_sines=sum_sines+sin(d_isub_matrix[y*THREAD_SIZE+z]*(angle*(2*z)))+sin(d_isub_matrix[y*THREAD_SIZE+z]*(angle*(2*z+1)));
                sum_cosines=sum_cosines+cos(d_isub_matrix[y*THREAD_SIZE+z]*(angle*(2*z)))+cos(d_isub_matrix[y*THREAD_SIZE+z]*(angle*(2*z+1)));
            }
            sum_sin[x][y]=sum_sines/(2*THREAD_SIZE);
            sum_cos[x][y]=sum_cosines/(2*THREAD_SIZE);
        }
    }
    //getting the value!
    for(a=0;a<THREAD_SIZE;a++)
    {
        for(b=0;b<THREAD_SIZE;a++)
        {
            expo1=exp(sum_sin[a][b]);
            expo2=exp(sum_cos[a][b]);
            expo_final=expo1+expo2;
            block[a][b]=expo_final;
        }
    }

其中定义了ARRAY_SIZE和THREAD_SIZE,它们的值分别是64 (ARRAY)和32 (THREAD)。我验证了sum_sin, sum_cos, sum_sin[][], sum_cos[][],angle,expo1,expo2和expo_final的值。直到最后一个,一切都很好。它们返回一些正负值。但是我无法得到block[][]的值。有人知道是怎么回事吗?

你的问题是:

for(b=0;b<THREAD_SIZE;a++)