Inanzitutto il codice che mi hai iniato in privato è un pò da rivedere, e forse anche il caso di postarlo direttamente sul thread.
un cosa come questa
for(firm = 0; firm < N; firm++){
if(failF[firm] ==1){
for(bank = 0; bank < Bk; bank++){
if(amico[firm] == bank && dMarketMatrix[firm][bank] == 1 && failB[bank] == 1 ){
for(lender = 0; lender < Bk; lender++){
if(vicino[bank] == lender && marketBank[bank][lender] == 1 && real_interbank[bank][lender] == 1 ){
fprintf(out35,"%d %d %d %d %d %lf %lf %d %lf %lf %lf %lf %lf %lf %d\n",t,firm,bank,lender,failB[bank],profitB[bank],badDebtB[bank],failB[lender],badDebtB[lender],equityB[lender],leverageB[bank],leverageB[lender],size[bank],size[lender],n_sim);
//fflush(out35);
}
}
}
}
}
}
è inguardabile! illeggibile! INUTILMENTE complessa!
Anche il quantitativo di fflush sono inutili se non a rallentare l'applicazione.
Manca il riferimento a time.h e usi tante variabili ma proprio tante che nemmeno usi realmente.
Non commentato, Identato alla cavolo, NON STRUTTURATO, esci da funzioni senza return.
Data la mole di calcolo vedere solo un microprocessore al lavoro al mondo d'oggi mi fa arrabbiare!
Ho 4 core, uno fa le flessioni mentre gli altri 4 lo guardano ridendo!
E meno male che ho tolto quasi(perchè sicuramente ne è scappato qualcuno) tutti i fflush, recuperando qualche secondo...
questi sono i primi 100 valori:
1 1331.013163 0
2 1879.761031 0
3 2012.550587 0
4 2057.389136 0
5 2071.129038 0
6 2116.844142 0
7 2071.250794 0
8 2115.048444 0
9 2126.669167 0
10 2271.284614 0
11 2246.503573 0
12 2301.787103 0
13 2332.998303 0
14 2403.967109 0
15 2488.538922 0
16 2523.534832 0
17 2556.949682 0
18 2595.734126 0
19 2628.314103 0
20 2691.765689 0
21 2737.912098 0
22 2722.956585 0
23 2724.514226 0
24 2779.799186 0
25 2812.218523 0
26 2750.877533 0
27 2781.391468 0
28 2860.804224 0
29 2907.627381 0
30 2925.832534 0
31 2872.763573 0
32 2889.766339 0
33 2839.201856 0
34 2890.637403 0
35 2886.091110 0
36 2903.189977 0
37 2892.526653 0
38 2871.946286 0
39 2914.006495 0
40 2874.131032 0
41 2875.974459 0
42 2931.516161 0
43 2928.077253 0
44 3062.274891 0
45 3131.784180 0
46 2955.002307 0
47 3017.015137 0
48 3043.522329 0
49 3016.336382 0
50 3095.064540 0
51 3096.248356 0
52 2954.653878 0
53 3017.392052 0
54 3000.184367 0
55 3056.370422 0
56 3079.144715 0
57 3062.203718 0
58 3122.328466 0
59 3157.537685 0
60 3103.302272 0
61 3091.007182 0
62 3011.964328 0
63 3069.792074 0
64 3114.767346 0
65 3071.391646 0
66 3004.979755 0
67 2993.194327 0
68 3021.083440 0
69 3025.908139 0
70 2998.705953 0
71 2978.042671 0
72 3016.717432 0
73 2902.686880 0
74 2914.295093 0
75 2908.488639 0
76 2884.120712 0
77 2972.572655 0
78 3020.392039 0
79 3063.986611 0
80 3064.078401 0
81 3047.597302 0
82 2999.027539 0
83 2951.502204 0
84 2969.137946 0
85 2965.790370 0
86 2988.788459 0
87 3007.894560 0
88 3142.153684 0
89 3272.637027 0
90 3268.085113 0
91 3267.732118 0
92 3150.521547 0
93 3241.968299 0
94 3261.837254 0
95 3242.612442 0
96 3247.932237 0
97 3259.576350 0
98 3210.240890 0
99 3254.696020 0
100 3296.789792 0
questi sono i valori con -fflush-store
1 1331.013163 0
2 1879.761031 0
3 2012.550587 0
4 2057.389136 0
5 2071.129038 0
6 2116.844142 0
7 2071.250794 0
8 2115.048444 0
9 2126.669167 0
10 2271.284614 0
11 2246.503573 0
12 2301.787103 0
13 2332.998303 0
14 2403.967109 0
15 2488.538922 0
16 2523.534832 0
17 2556.949682 0
18 2595.734126 0
19 2628.314103 0
20 2691.765689 0
21 2737.912098 0
22 2722.956585 0
23 2724.514226 0
24 2779.799186 0
25 2812.218523 0
26 2750.877533 0
27 2781.391468 0
28 2860.804224 0
29 2907.627381 0
30 2925.832534 0
31 2872.763573 0
32 2889.766339 0
33 2839.201856 0
34 2890.637403 0
35 2886.091110 0
36 2903.189977 0
37 2892.526653 0
38 2871.946286 0
39 2914.006495 0
40 2874.131032 0
41 2875.974459 0
42 2931.516161 0
43 2928.077253 0
44 3062.274891 0
45 3131.784180 0
46 2955.002307 0
47 3017.015137 0
48 3043.522329 0
49 3016.336382 0
50 3095.064540 0
51 3096.248356 0
52 2954.653878 0
53 3017.392052 0
54 3000.184367 0
55 3056.370422 0
56 3079.144715 0
57 3062.203718 0
58 3122.328466 0
59 3157.537685 0
60 3103.302272 0
61 3091.007182 0
62 3011.964328 0
63 3069.792074 0
64 3114.767346 0
65 3071.391646 0
66 3004.979755 0
67 2993.194327 0
68 3021.083440 0
69 3025.908139 0
70 2998.705953 0
71 2978.042671 0
72 3016.717432 0
73 2902.686880 0
74 2914.295093 0
75 2908.488639 0
76 2884.120712 0
77 2972.572655 0
78 3020.392039 0
79 3063.986611 0
80 3064.078401 0
81 3047.597302 0
82 2999.027539 0
83 2951.502204 0
84 2969.137946 0
85 2965.790370 0
86 2988.788459 0
87 3007.894560 0
88 3142.153684 0
89 3272.637027 0
90 3268.085113 0
91 3267.732118 0
92 3150.521547 0
93 3241.968299 0
94 3261.837254 0
95 3242.612442 0
96 3247.932237 0
97 3259.576350 0
98 3210.240890 0
99 3254.696020 0
100 3296.789792 0
Come vedi i miei valori non coincidono ne con il tuo ne con quello dei tuoi prof.
Forse perchè io uso una architettura risc.
Ora se io procederei cosi:
1- tiro una bella riga sul codice scritto.
2 - Torno a riscrivere il codice usando un pò di buon senso.
3 - Cerco di non usare double che creano molti problemi, salvando solo alla fine in double es:
0.5 / 2 = 0.25 == 500 / 2 = 250 / 1000
quindi usi numeri interi moltiplicati ad esempio per mille e solo alla fine nel momento di salvarli li trasformi in double dividendoli per mille o 10000 a seconda dei casi.
Sempre che sia possibile questa tecnica toglie tutti gli errori dei calcoli double che per loro natura perdono precisione a lungo andare.
In bocca al lupo