Bonjour,
Tout nouveau en C (j'utilise Visual C++), je fais quelque expérimentations, notamment en vue de tester la célérité. Dans une triple boucle imbriquée (code ci-dessous), j'assiste à un phénomène bien étrange...
La durée de calcul est, comme on s'y attend, proportionnelle à la limite supérieure des boucles sur k et sur i (indices des deux boucles "extérieures").
Mais, contre toute attente, elle semble indépendante de la limite supérieure sur j!
Je précise que ceci se produit lorsque je compile en mode "release".
Lorsque je compile en mode "debug", mon chronomètre retrouve ses esprits et un pas à pas semble indiquer que tout se passe comme on s'y attend...
Bref, je me plante quelque part, mais où ?
Merci d'avance pour vos lumières !
Note : chez moi, une valeur de 100000000 (100 millions) comme limite sur k donne un temps de calcul de l'ordre de 20s.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 #include <stdio.h> #include <stdlib.h> long Multiplie(long x, long a) {return x*a+1; } long Divise(long x, long a) {return x/a; } int main() { long i, j, k, a, x; long N, M; printf("Limite sur k ?\n"); scanf("%d", &N); M = N/2; a = 22533; x = 25421; for(k=0;k<=N-1;k++) { for (i=0; i<200;i++) { for(j=0; j<50;j++) { x = Multiplie(x,a); x = Divise(x,a); if (j==25 && i==100 && k==M) { printf("La moitie est traitee\n");} } } } printf("Termine !\n"); return 0; }
Partager