Avatar billede apa Nybegynder
28. december 2003 - 22:22 Der er 10 kommentarer og
1 løsning

Brug af srand

Hej Eksperterter,
Er der én der kan forklare mig præcist hvordan følgende kode skal forstås og bruges:
srand ((float)microtime()*1000000);
Avatar billede detox Nybegynder
28. december 2003 - 22:29 #1
Den bruges til at lave 'seed' med, sådan at tilfældige tal ikke bliver de samme. Hvis du fx bruger funktionen shuffle() vil du bruge srand() for ikke at få den samme rækkefølge.
Avatar billede erikjacobsen Ekspert
28. december 2003 - 22:35 #2
Efter PHP 4.2.0 er der ingen grund til at kalde srand() - det sker automatisk, dvs.
man får ikke den samme "tilfældige" række tal som man gjorde ellers. Men man må gerne!
Avatar billede apa Nybegynder
28. december 2003 - 22:36 #3
Okay - men mere detaljeret: srand er navnet på funktionen, float er typen men hvad laver microtime() og hvorfor lige ganges med 1000000. Og hvad betyder det at den laver 'seed'. Returnerer funktionen noget?
Avatar billede apa Nybegynder
28. december 2003 - 22:39 #4
Okay - så det er er ikke længere nødvendigt at kalde srand inden f.eks. shuffle funktionen.
Avatar billede erikjacobsen Ekspert
28. december 2003 - 22:44 #5
pseudotilfældige talgeneratorer (rand, og shuffle, der sikkert bruger rand), skal
have et startsted - det sætter srand. Før php 4.2.0 ville man få den samme "tilfældige"
følge af tal hver gang hvis man ikke brugte den.

Og det kan man så stadig ved at sige srand(etellerandetfasttal) - det er smart til
aftestning, da man så kan få reproducerbare programudførelser, der er nemmere at
debugge end hvis tallene ændrer sig hver gang. Man vil så typisk gerne have "tilfældige"
tal når det skal køre i produktion.
Avatar billede detox Nybegynder
28. december 2003 - 22:44 #6
"(float)microtime()*1000000" er bare for at lave et tilfældigt tal til srand() funktionen (et såkaldt 'startseed'). Funktionen returnerer ikke noget.
Avatar billede apa Nybegynder
28. december 2003 - 23:02 #7
Er der én af jer der kan komme med et kort eksempel på brugen af srand?
Avatar billede detox Nybegynder
28. december 2003 - 23:20 #8
Avatar billede apa Nybegynder
29. december 2003 - 01:10 #9
Takker for hjælpen - læg svar hvis i vil ha' points!
Avatar billede detox Nybegynder
29. december 2003 - 01:18 #10
Velbekommen
Avatar billede apa Nybegynder
29. december 2003 - 01:22 #11
Jeg fandt et lille eksempel som illusterer pointen rimelig godt:

<?php
srand(25); //srand er fast
for ($i=1; $i<=10; $i++) echo "$i" . rand(1, 20). ' ';
echo '<br>';

srand(25);
for ($i=1; $i<=10; $i++) echo "$i" . rand(1, 20). ' ';
echo '<br>';

srand(25);
for ($i=1; $i<=10; $i++) echo "$i" . rand(1, 20). ' ';
echo '<br>';


srand((double)microtime()*1000000); //srand er nu forskellig for hver gang
for ($i=1; $i <= 10; $i++) echo "$i" . rand(1, 20). ' ';
echo '<br>';

srand((double)microtime()*1000000);
for ($i=1; $i <= 10; $i++) echo "$i" . rand(1, 20). ' ';
echo '<br>';

srand((double)microtime()*1000000);
for ($i=1; $i <= 10; $i++) echo "$i" . rand(1, 20). ' ';
echo '<br>';
?>

Printout:
114 27 34 41 56 69 720 84 96 108
114 27 34 41 56 69 720 84 96 108
114 27 34 41 56 69 720 84 96 108

110 220 315 46 53 66 73 814 911 104
17 216 36 412 56 65 78 81 917 102
16 26 317 41 513 616 71 816 913 1010
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester