Ruby avec le même bogue dans ces première version
Noter la différence au niveau de la boucle entre les deux version. La première sans initialisation de la variable de boucle.
Noter la différence de consommation de mémoire. Si on doit absolument utiliser une valeur globale, initialiser la valeur de la variable de boucle fait une différence.
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 julia> x = rand(1000); julia> function sum_global() s = 0.0 for i in x s += i end return s end; julia> function sum_global2() s = 0.0 x2 = x for i in x2 s += i end return s end;
La version avec paramètre reste le meilleur choix
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 julia> @time sum_global() 0.010457 seconds (7.70 k allocations: 296.413 KiB) 500.5470581312482 julia> @time sum_global() 0.000177 seconds (3.49 k allocations: 70.156 KiB) 500.5470581312482 julia> @time sum_global2() 0.000156 seconds (3.49 k allocations: 70.156 KiB) 500.5470581312482 julia> @time sum_global2() 0.000152 seconds (3.49 k allocations: 70.156 KiB) 500.5470581312482
Mais j'ai du mal à comprendre une telle différence de consommation de mémoire et de temps.
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 julia> function sum_arg(x) s = 0.0 for i in x s += i end return s end; julia> @time sum_arg(x) 0.008057 seconds (4.59 k allocations: 220.394 KiB) 500.5470581312482 julia> @time sum_arg(x) 0.000003 seconds (1 allocation: 16 bytes) 500.5470581312482
Partager