Making complex array initializations more readable
First, magic constants are bad, you should name them

int const N = 53;
double result[N];


Second, magic patterns are even worse, you should also name them along with documentation comments

// explain where the pattern comes from
int const pattern[] = { 13, 21, 12, 25, /* 49 more constants */ };


Third, manually loop unrolling can sometimes help, but only after you benchmarked

for (int i = 0; i &lt; N; ++i) {
    result[i] = ((var1[pattern[i]] * (i+1)) + (var2[7] * (i+2))) / var3[i];
}


For your second part, rinse and repeat:

double var1_new[N];


Fourth, use the Standard Library for standardized algorithms

#include &lt;algorithm&gt;
std::copy_n(var1, N, var1_new);


Again, rinse and repeat the loop unrolling

for (int i = 0; i &lt; N; ++i) {
    var1_new[pattern[i]] += result[i];
}


Finally, you might want to give your variables meaningful names: var1, var2, var3 do not explain their intended use very well. Think about what they mean in your application (it was unclear from the code fragment alone).