4 Einträge, 1 Seite |
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
sub bench_randomx () {
# ALLE VERFAHREN
my $targetcount = 400; # Anzahl der Elemente, die "ausgewählt" werden müssen
# 2. VARIANTE
my $targetlimit = 10; # max. Anzahl gleichzeitig auswählbarer Elemente
my @cache =(); # cache der Zufallszahlen
my $cached = 0;
&println ("Teste auf $targetcount rand()/cachedrand Elemente,");
Benchmark::cmpthese(-1, {
# Ziel ist es beides Mal, 150 Elemente vorzunehmen
'random WHILE (1b)' => sub {
my $i=0;
while ($targetcount >$i) {
int(rand($targetlimit)); 1;
$i++;
}
},
' cachedrand (2)' => sub {
if (!$cached) {
print "initcache";
my $i=0;
while ($targetlimit >$i) {
push (@cache,int(rand($targetlimit)));
$i++;
}
$cached=1;
}
my $targeting = 0;
my $tcount = $targetcount;
while ($tcount>0) {
$cache[$targeting];
1;
if (++$targeting== $targetlimit) { $targeting=0;}
$tcount--;
}
},
}
);
&println ("\nReihenfolge der Elemente in (2):");
&println (join(",",@cache));
}
1
2
3
4
5
6
440 0.000582 0.000000 88: if (++$targeting== $targetlimit) {
400 0.000554 0.000000 86: $cache[$targeting];
400 0.000549 0.000000 89: $tcount--;
wird konfrontiert mit:
800 0.000288 0.000000 72: int(rand($targetlimit)); 1;
400 0.000457 0.016000 87: 1;
4 Einträge, 1 Seite |