“res” is uninitialized so may contain garbage values. To fix, set it to zero.
% cat reduce.c
#include <stdio.h>
#define N 10
double reduce(double * a, int n) {
double res=0.0;
for (int i=0; i< n; i++)
res += a[i];
return res;
}
int main(int argc, char *argv[]) {
double a[N];
int i;
for (i=0; i<N; i++) {
a[i] = i;
}
printf("%f\n", reduce(a, N));
return 0;
}
% nvc -O2 reduce.c ; a.out
45.000000