Это точный код, который вы использовали, или просто пример? Я запустил этот код здесь (просто вырезал и вставил из ваших сообщений, с заменой AT на AT2 во втором цикле:
const int DIM=10;
double AB[DIM][DIM], AT[3*DIM], AT2[3*DIM];
int i,j;
for(i=0; i<DIM;i++) AB[0][i] = -1;
for(i=0; i<DIM;i++) AB[1][i] = 2;
for(i=0; i<DIM;i++) AB[2][i] = -1;
for(i=0; i<3; i++)
for(j=0;j<DIM;j++) {
AT[i*DIM+j]=AB[i][j];
}
printf("AT:");
for (i=0;i<3*DIM;++i) printf("%lf ",AT[i]);
printf("\n\n");
for(i=0; i<DIM;i++) AT2[i] = -1;
for(i=0; i<DIM;i++) AT2[DIM+i] = 2;
for(i=0; i<DIM;i++) AT2[2*DIM+i] = -1;
printf("AT2:");
for (i=0;i<3*DIM;++i) printf("%lf ",AT2[i]);
printf("\n\n");
printf("Diff:");
for (i=0;i<3*DIM;++i) printf("%lf ",AT[i]-AT2[i]);
printf("\n\n");
и получил этот вывод
AT: -1,000000 -1,000000 -1,000000 -1,000000 -1,000000 -1,000000 -1,000000 -1,0000
00 -1.000000 -1.000000 2.000000 2.000000 2.000000 2.000000 2.000000 2.000000 2.0
00000 2,000000 2,000000 2,000000 -1,000000 -1,000000 -1,000000 -1,000000 -1,0000
00 -1,000000 -1,000000 -1,000000 -1,000000 -1,000000
AT2: -1,000000 -1,000000 -1,000000 -1,000000 -1,000000 -1,000000 -1,000000 -1,000
000 -1,000000 -1,000000 2,000000 2.000000 2.000000 2.000000 2.000000 2.000000 2.
000000 2.000000 2.000000 2.000000 -1.000000 -1.000000 -1.000000 -1.000000 -1.000
000 -1,000000 -1,000000 -1,000000 -1,000000 -1,000000
Разница: 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,0
00000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0.
000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0
.000000 0,000000 0,000000 0,000000
Очевидно, AT и AT2 одинаковы. Что я и ожидал.