Ik zit met een probleem, niet in de exacte definitie maar ik merk iets op wat voor mij onlogisch lijkt. Het gaat dus om de snelheid van een bepaalde methode om tot hetzelfde resultaat te komen, je kan het met een switch doen of met geneste if's. Mij lijkt dat de geneste if's veel sneller moeten zijn omdat laten we het volgende doen : c = (1) ? 2 : 3; waarbij de getallen staan voor de verstreken tijd. Terwijl een switch alle opties overloopt en dus infeite voor elke optie 1 tijdseenheid nodig heeft en dan de juiste 2. Allemaal leuk en wel in theorie, ik zal er wat voorbeeldjes bij plakken :
De snelheid meet ik met het time commando op linux (dit compileer ik met GCC 4.1.1 op Gentoo) en draai ik op een Dell Inspiron 6400. De switch draait in een 8 tal seconden en de if structuur in 15 seconden.
C:
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
37
38
39
40
41
42
43
44
45
46
47
48
| # include <stdio.h> int main(void) { double i,b; int a,x,y; for(i=0;i<100000000;i++) { for(a=1;a<10;a++) { switch(a) { case 9 : y=-1; x=-1; break; case 8 : y=-1; x=0; break; case 7 : y=-1; x=1; break; case 6 : y=0; x=-1; break; case 5 : y=0; x=0; break; case 4 : y=0; x=1; break; case 3 : y=1; x=-1; break; case 2 : y=1; x=0; break; case 1 : y=1; x=1; break; } } } } |
C:
1
2
3
4
5
6
7
8
9
10
11
12
| # include <stdio.h> int main(void) { double i,b; int a,x,y; for(i=0;i<100000000;i++) { for(a=1;a<10;a++) { y = (a > 6) ? -1 : (a<2) ? 1 : 0; x = (a%3) ? 1 : ((a+2)%3) ? -1 : 0; } } } |
De snelheid meet ik met het time commando op linux (dit compileer ik met GCC 4.1.1 op Gentoo) en draai ik op een Dell Inspiron 6400. De switch draait in een 8 tal seconden en de if structuur in 15 seconden.