I can't understand the output of this loop, with N=64:
int t;
double new_y_avg[N];
/* ... */
for(t = 0; t<N; t++){
printf("new_y_avg[%d] = %f \t new_y_avg[%d] = %f \t new_y_avg[%d]= %f \n",
((t+1)%N), new_y_avg[(t+1)%N],
t, new_y_avg[t%N],
((t-1)%N), new_y_avg[(t-1)%N]
);
fflush(stdout);
}
which gives the following output:
new_y_avg[1] = 0.164471 new_y_avg[0] = 0.429837 new_y_avg[-1]= -13.421363
new_y_avg[2] = 0.062036 new_y_avg[1] = 0.164471 new_y_avg[0]= 0.429837
new_y_avg[3] = 0.023910 new_y_avg[2] = 0.062036 new_y_avg[1]= 0.164471
new_y_avg[4] = 0.009836 new_y_avg[3] = 0.023910 new_y_avg[2]= 0.062036
new_y_avg[5] = 0.004009 new_y_avg[4] = 0.009836 new_y_avg[3]= 0.023910
new_y_avg[6] = 0.001817 new_y_avg[5] = 0.004009 new_y_avg[4]= 0.009836
new_y_avg[7] = -nan new_y_avg[6] = 0.001817 new_y_avg[5]= 0.004009
new_y_avg[8] = -nan new_y_avg[7] = 0.000410 new_y_avg[6]= 0.001817
new_y_avg[9] = -nan new_y_avg[8] = -0.000260 new_y_avg[7]= 0.000410
new_y_avg[10] = -nan new_y_avg[9] = -0.000787 new_y_avg[8]= -0.000260
new_y_avg[11] = -nan new_y_avg[10] = -0.001049 new_y_avg[9]= -0.000787
new_y_avg[12] = -nan new_y_avg[11] = -0.001614 new_y_avg[10]= -0.001049
new_y_avg[13] = -nan new_y_avg[12] = -0.001979 new_y_avg[11]= -0.001614
new_y_avg[14] = -nan new_y_avg[13] = -0.001137 new_y_avg[12]= -0.001979
new_y_avg[15] = -nan new_y_avg[14] = -0.000353 new_y_avg[13]= -0.001137
new_y_avg[16] = 0.000516 new_y_avg[15] = -0.000379 new_y_avg[14]= -0.000353
new_y_avg[17] = -nan new_y_avg[16] = 0.000516 new_y_avg[15]= -0.000379
new_y_avg[18] = -nan new_y_avg[17] = 0.000855 new_y_avg[16]= 0.000516
new_y_avg[19] = -nan new_y_avg[18] = 0.000209 new_y_avg[17]= 0.000855
new_y_avg[20] = 0.000199 new_y_avg[19] = 0.000190 new_y_avg[18]= 0.000209
new_y_avg[21] = -nan new_y_avg[20] = 0.000199 new_y_avg[19]= 0.000190
new_y_avg[22] = -nan new_y_avg[21] = 0.000304 new_y_avg[20]= 0.000199
new_y_avg[23] = -nan new_y_avg[22] = -0.000368 new_y_avg[21]= 0.000304
new_y_avg[24] = -nan new_y_avg[23] = 0.000930 new_y_avg[22]= -0.000368
new_y_avg[25] = -nan new_y_avg[24] = -0.000782 new_y_avg[23]= 0.000930
new_y_avg[26] = -nan new_y_avg[25] = -0.002568 new_y_avg[24]= -0.000782
new_y_avg[27] = -nan new_y_avg[26] = -0.001959 new_y_avg[25]= -0.002568
new_y_avg[28] = -nan new_y_avg[27] = -0.001674 new_y_avg[26]= -0.001959
new_y_avg[29] = -nan new_y_avg[28] = -0.001250 new_y_avg[27]= -0.001674
new_y_avg[30] = -nan new_y_avg[29] = -0.000087 new_y_avg[28]= -0.001250
new_y_avg[31] = -0.000031 new_y_avg[30] = -0.000804 new_y_avg[29]= -0.000087
new_y_avg[32] = -nan new_y_avg[31] = -0.000031 new_y_avg[30]= -0.000804
new_y_avg[33] = -0.000031 new_y_avg[32] = 0.000537 new_y_avg[31]= -0.000031
new_y_avg[34] = -nan new_y_avg[33] = -0.000031 new_y_avg[32]= 0.000537
new_y_avg[35] = -0.000087 new_y_avg[34] = -0.000804 new_y_avg[33]= -0.000031
new_y_avg[36] = -nan new_y_avg[35] = -0.000087 new_y_avg[34]= -0.000804
new_y_avg[37] = -0.001674 new_y_avg[36] = -0.001250 new_y_avg[35]= -0.000087
new_y_avg[38] = -nan new_y_avg[37] = -0.001674 new_y_avg[36]= -0.001250
new_y_avg[39] = -nan new_y_avg[38] = -0.001959 new_y_avg[37]= -0.001674
new_y_avg[40] = -nan new_y_avg[39] = -0.002568 new_y_avg[38]= -0.001959
new_y_avg[41] = -nan new_y_avg[40] = -0.000782 new_y_avg[39]= -0.002568
new_y_avg[42] = -nan new_y_avg[41] = 0.000930 new_y_avg[40]= -0.000782
new_y_avg[43] = -nan new_y_avg[42] = -0.000368 new_y_avg[41]= 0.000930
new_y_avg[44] = -nan new_y_avg[43] = 0.000304 new_y_avg[42]= -0.000368
new_y_avg[45] = -nan new_y_avg[44] = 0.000199 new_y_avg[43]= 0.000304
new_y_avg[46] = -nan new_y_avg[45] = 0.000190 new_y_avg[44]= 0.000199
new_y_avg[47] = -nan new_y_avg[46] = 0.000209 new_y_avg[45]= 0.000190
new_y_avg[48] = 0.000516 new_y_avg[47] = 0.000855 new_y_avg[46]= 0.000209
new_y_avg[49] = -nan new_y_avg[48] = 0.000516 new_y_avg[47]= 0.000855
new_y_avg[50] = -nan new_y_avg[49] = -0.000379 new_y_avg[48]= 0.000516
new_y_avg[51] = -nan new_y_avg[50] = -0.000353 new_y_avg[49]= -0.000379
new_y_avg[52] = -0.001979 new_y_avg[51] = -0.001137 new_y_avg[50]= -0.000353
new_y_avg[53] = -nan new_y_avg[52] = -0.001979 new_y_avg[51]= -0.001137
new_y_avg[54] = -nan new_y_avg[53] = -0.001614 new_y_avg[52]= -0.001979
new_y_avg[55] = -nan new_y_avg[54] = -0.001049 new_y_avg[53]= -0.001614
new_y_avg[56] = -nan new_y_avg[55] = -0.000787 new_y_avg[54]= -0.001049
new_y_avg[57] = -nan new_y_avg[56] = -0.000260 new_y_avg[55]= -0.000787
new_y_avg[58] = -nan new_y_avg[57] = 0.000410 new_y_avg[56]= -0.000260
new_y_avg[59] = -nan new_y_avg[58] = 0.001817 new_y_avg[57]= 0.000410
new_y_avg[60] = -nan new_y_avg[59] = 0.004009 new_y_avg[58]= 0.001817
new_y_avg[61] = -nan new_y_avg[60] = 0.009836 new_y_avg[59]= 0.004009
new_y_avg[62] = -nan new_y_avg[61] = 0.023910 new_y_avg[60]= 0.009836
new_y_avg[63] = -nan new_y_avg[62] = 0.062036 new_y_avg[61]= 0.023910
new_y_avg[64] = -nan new_y_avg[63] = 0.164471 new_y_avg[62]= 0.062036
whilst the following code:
binned_file = fopen("binned_avg.txt","w+");
for(t=0;t<N;t++){
fprintf(binned_file,"%d \t %f \n",
t,new_y_avg[t]);
}
fclose(binned_file);
gives a resonable output:
0 0.429837
1 0.164471
2 0.062036
3 0.023910
4 0.009836
5 0.004009
6 0.001817
7 0.000410
8 -0.000260
9 -0.000787
10 -0.001049
11 -0.001614
12 -0.001979
13 -0.001137
14 -0.000353
15 -0.000379
16 0.000516
17 0.000855
18 0.000209
19 0.000190
20 0.000199
21 0.000304
22 -0.000368
23 0.000930
24 -0.000782
25 -0.002568
26 -0.001959
27 -0.001674
28 -0.001250
29 -0.000087
30 -0.000804
31 -0.000031
32 0.000537
33 -0.000031
34 -0.000804
35 -0.000087
36 -0.001250
37 -0.001674
38 -0.001959
39 -0.002568
40 -0.000782
41 0.000930
42 -0.000368
43 0.000304
44 0.000199
45 0.000190
46 0.000209
47 0.000855
48 0.000516
49 -0.000379
50 -0.000353
51 -0.001137
52 -0.001979
53 -0.001614
54 -0.001049
55 -0.000787
56 -0.000260
57 0.000410
58 0.001817
59 0.004009
60 0.009836
61 0.023910
62 0.062036
63 0.164471
Being that printing to file works (and the output is reasonable with the rest of my code) the problem should not be new_y_avg
. Thus I don't understand why in the first loop one line gives new_y_avg[60] = -nan
and one gives new_y_avg[60]= 0.009836
. I tried running it with valgrind but it gives no error.
Edit: I am working with the same array the code I posted are one after the other (I tried printing on terminal when calling a function inside of loop and it gave absurd values (no the function doesn't change the values of the array at all)), I corrected the loop starting from 1 instead of 0 but still have the same problem, the loop needs to be closed at N and not N-1 because of other another function I'm calling. I cannot post the whole code because: it's calling too long, its divided in multiple file and most important it's an assignment at university. Later I'll try changing the loop as stated by Yunnosch and post the result
You defined new_y_avg as an array of double floats in double new_y_avg[N]
.
However, you used the incorrect format specifier at printf.
You used printf("new_y_avg[%d] = %f ...
while the format specifier for double is %lf.
It introduced undefined behaviour (UB) which meant the compiler could have done anything. It might work sometimes but it is quite unpredictable.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.